그리디
[백준] 1449. 수리공 항승 풀이
hch06
2025. 2. 2. 18:00
https://www.acmicpc.net/problem/1449
우선 주어진 위치들을 정렬해준다.
그 후 첫번째 위치부터 이중반복문을 통해 다음 값들과의 거리를 비교하며 테이프의 길이 안에
드는 지 확인하고, 테이프의 길이내에 벗어나는 값이 나오면 테이프 1개 카운트한다.
그리고 다시 아까 테이프의 길이를 벗어난 값부터 같은 과정을 반복하며 테이프 개수 카운트.
전부 확인 후 개수 출력
C
더보기
더보기
#include <stdio.h>
#include <algorithm>
using namespace std;
int main(){
int n, l; scanf("%d %d", &n, &l);
int v[n];
for(int i = 0; i < n; i++) scanf("%d", &v[i]);
sort(v, v + n);
int start = 0, end = 0, cnt = 0;
for(int i = 0; i < n; i++){
start = i; end = i;
for(int j = i+1; j < n; j++){
if(v[j] - v[start] + 1 <= l) end = j;
else break;
}
cnt++;
if(end != start) i = end;
}
printf("%d", cnt);
}
Python
더보기
더보기
n, l = map(int, input().split())
v = list(map(int, input().split()))
v.sort()
start = 0; end = 0; cnt = 0; i = 0
while i < n:
start = i; end = i
for j in range(i+1, n):
if v[j] - v[start] + 1 <= l: end = j
else: break
cnt += 1
if end != start: i = end
i += 1
print(cnt)