1449 : 수리공 항승

1085 단어 백준파이썬백준

문제

코드

import sys 
input =sys.stdin.readline 

n,l = map(int,input().split())
places = list(map(int,input().split()))
places.sort()

start = places[0]
end = places[0]+l ; cnt=1

for place in places:
    if end<=place: #사이에 있는 경우 
        start = place
        end = place+l
        cnt+=1

print(cnt)

해설

n,l을 입력받고 places를 입력받고 정렬해준다.
그 이유는 위치를 오름 차순으로 봐야지 하나씩 넘어가며 체크가 가능하다
그 후 start,end 변수를 초기화하는데 start는 제일 앞부분 그리고 end는 start에서 테이프길이 만큼 더한 곳이다.
위치로부터 좌우 0.5씩 감아야하니깐 위치 한칸당 1의 테이프를 붙여야한다고 생각하면 된다
즉 1,2 위치를 막기 위해서는 2의 길이 테이프가 필요한데 붙여할 곳이 0.5~2.5인 2의 길인데 0.5더해서 1~3이라고 생각하면된다.

그 후 for문을 돌면서 사이에 있는것은 무시하고 만약 앞에서 했던 끝부분보다 뒤에 있는 곳이라면 start,end를 초기화 해주고 cnt를 1올려준다.

좋은 웹페이지 즐겨찾기