오도원입니다.

건강과 행복을 위하여

컴퓨터공학/알고리즘

[백준] 1449. 수리공 항승

오도원공육사 2020. 5. 9. 18:02
반응형

https://www.acmicpc.net/problem/1449

 

1449번: 수리공 항승

첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나 같은 자연수이다.

www.acmicpc.net

1. 문제

길이가 L인 테이프를 가지고, 물이 새는 곳을 막아야한다. 물을 막을 때는 좌우 0.5만큼을 더 붙여줘야한다.

 

테이프를 자를 수 없고, 테이프를 겹쳐서 붙이는 것도 가능하다.

 

2. 접근

물이 새는 연속된 위치의 길이가 테이프-1 (-1은 좌우 0.5를 의미) 보다 짧을 경우, 테이프를 한번에 붙인다. 물이 새는 연속된 위치의 길이가 테이프 -1 보다 길 경우에는 테이프를 자를 수 없기 때문에 테이프를 따로 붙인다.

 

1. 물이 새는 곳의 위치를 오름차순으로 정렬

2. 테이프 길이보다 짧을 때까지의 연속된 물이 새는 곳을 구한다.

3. 테이프 길이보다 길 경우 테이프를 새로 쓴다.

 

3. 소스코드

n, l = map(int, input().split())
p = sorted(list(map(int, input().split())))

def tape(p, l):
    count = 1
    start = p[0]
    for i in range(len(p)):
        if p[i] - start > l - 1:
            count += 1
            start = p[i]
    return count

print(tape(p, l))
반응형

'컴퓨터공학 > 알고리즘' 카테고리의 다른 글

Algorithm 01. 완전 검색 1  (0) 2020.05.14
Python Algorithm. 1주차 스터디 계획  (0) 2020.05.11
[백준] 1049. 기타줄  (0) 2020.05.09
[백준] 1120. 문자열  (0) 2020.05.09
[백준] 10610. 30  (0) 2020.05.09