Input : 만나야 하는 팬의 수 N
[ s, e ] 팬이 머무는 시간의 수
Output: 머무르는 최소의 시간
풀이:
직관적으로 보면, start = 제일 일찍 집 가는 사람 ~~ end = 제일 늦게 오는 사람으로 하면 된다.
하지만, 위 문장을 그대로 코드화 하면 다음과 같은 경우에 문제가 생긴다.
(start = 보라색 포인트, end = 파란색 포인트) 가 되어야 하는데,
(start = 보라색 포인트, end = 노란색 포인트) 가 된다.
따라서 ,
que = 팬들( 집 가는 시간 기준으로 sort)
start_time = 제일 일찍 집 가는 사람
start 시간에 만날 수 있는 팬들을 que에서 제거
end_time = 남은 팬들 중 제일 늦게 오는 사람으로 하면 된다.
def solve(Fans):
que = sorted(Fans,key = lambda x:x[1])
if que == []:return 0
start = que[0][1]
now = que[0][1]
while que:
s,e = que[0]
if s<=now and e>=now : que.pop(0)
else:
que = sorted(que,key = lambda x:x[0])
now = que[-1][0]
break
return now-start
if __name__=='__main__':
N = int(input())
Fans = []
for i in range(N):
s,e = map(int,input().split())
Fans.append([s,e])
print(solve(Fans))
'공부하는 것들 > 알고리즘' 카테고리의 다른 글
백준 1783 : 병든 나이트(그리디) **** (0) | 2021.03.07 |
---|---|
백준 1439 : 뒤집기(그리디) (0) | 2021.03.06 |
백준 17224 : APC는 왜 서브태스크 대회가 되었을까?(그리디) (0) | 2021.02.26 |
백준 159094 : UCPC는 무엇의 약자일까?(그리디) ** (0) | 2021.02.25 |
백준 2839 : 설탕 배달(그리디) (0) | 2021.02.25 |