문제 출처 : www.acmicpc.net/problem/1449
1449번: 수리공 항승
첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나
www.acmicpc.net
문제
항승이는 품질이 심각하게 나쁜 수도 파이프 회사의 수리공이다. 항승이는 세준 지하철 공사에서 물이 샌다는 소식을 듣고 수리를 하러 갔다.
파이프에서 물이 새는 곳은 신기하게도 가장 왼쪽에서 정수만큼 떨어진 거리만 물이 샌다.
항승이는 길이가 L인 테이프를 무한개 가지고 있다.
항승이는 테이프를 이용해서 물을 막으려고 한다. 항승이는 항상 물을 막을 때, 적어도 그 위치의 좌우 0.5만큼 간격을 줘야 물이 다시는 안 샌다고 생각한다.
물이 새는 곳의 위치와, 항승이가 가지고 있는 테이프의 길이 L이 주어졌을 때, 항승이가 필요한 테이프의 최소 개수를 구하는 프로그램을 작성하시오. 테이프를 자를 수 없고, 테이프를 겹쳐서 붙이는 것도 가능하다.
입력
첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 항승이가 필요한 테이프의 개수를 출력한다.
내 풀이
n, l = map(int, input().split())
rocate = list(map(int, input().split()))
rocate.sort()
tmp = rocate[0]
answer = 1
for i in range(1, n):
if rocate[i] - tmp >= l:
answer += 1
tmp = rocate[i]
print(answer)
이전에 풀었던 문제들과 비슷하기도 하고 해서 풀이법을 떠올리는 데에는 큰 시간이 들지 않았다.
다만 테이프의 길이가 구멍사이의 길이보다 +1 이어야한다는 부분과 주석없이 막 풀다보니 범위에서 자꾸 틀려서
오류를 냈다.
1. 입력받은 구멍의 위치를 오름차순으로 정렬한다.
2. 첫번째 구멍의 위치를 기준으로 잡고 다음 구멍들과 길이를 카운트 해가면서 테이프의 수를 늘릴지 말지 정한다.
'코딩테스트' 카테고리의 다른 글
[백준][파이썬]11497 통나무 건너뛰기 (0) | 2021.03.25 |
---|---|
[백준][파이썬] 1080 행렬 (0) | 2021.03.25 |
[백준][파이썬]1931 회의실 배정 (0) | 2021.03.23 |
[백준][파이썬] 1946 신입사원 (0) | 2021.03.22 |
[백준][파이썬] 16953번 A → B (0) | 2021.03.22 |