[백준-파이썬] 2457-공주님의 정원

kiteday·2025년 8월 20일
0

코딩테스트

목록 보기
40/46

문제바로가기

n = int(input())
date = []

for _ in range(n):
    f = list(map(int, input().split()))
    date.append(f)
date.sort()
start_date = [3, 1]
end_date = [11, 31]
flowers = 0

while(start_date<end_date):
    candidate = [n for n in date if n[0]<start_date[0] or (n[0]==start_date[0] and n[1]<=start_date[1])]
    # print(candidate)
    if not candidate:
        print(0)
        exit()

    e_day = [3,1]
    day = list()

    for c in candidate:
        if c[2:]>e_day:
            e_day = c[2:]
            day = c
    start_date = e_day
    # print(day)
    date.remove(day)
    flowers += 1

print(flowers)

이 문제의 핵심은 기준 날짜보다(초기값 3월1일) 앞서서 피는 꽃을 찾아야 하고, 그 꽃들 중에서 가장 오래 피어있는 꽃을 선택해야한다. 그리고 선택된 꽃이 지는 날이 다시 기준 날짜가 된다는 것이다. 이 아이디어만 생각하면 구현은 금방한다.
마지막으로 만약 그 어떤 꽃도 선택할 수 없을 땐 0을 출력하고 코드를 끝내면 되는 조건을 추가한다.

리스트로 뭔가를 하는게 익숙해서 무작정 리스트로 풀었는데 우선순위 큐 같은 걸로 풀수도 있을 것 같다.

profile
공부

0개의 댓글