[BOJ] 2457 공주님의 정원

이강혁·2024년 11월 1일
0

백준

목록 보기
28/42

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

3월1일부터 11월30일까지 꽃이 한 번도 안 지게 꽃을 선택하는 문제이다.
가로등 문제랑 비슷한줄알고 비슷하게 접근하려고 했다가 실패했다.

Python

n = int(input())
flowers = [list(map(int, input().split())) for _ in range(n)]
flowers.sort()

cnt = 1
cm, cd = 3, 1
em, ed = 0, 0

for f in flowers:
    
    if em == 12:
        break

    m, d, fm, fd = f

    if m > cm or (m == cm and d > cd):
        cm, cd = em, ed
        cnt += 1
    
    if (m < cm) or (m == cm and d <= cd):
        if em < fm:
            em, ed = fm, fd
        elif em == fm:
            ed = max(fd, ed)
    else:  
        cnt = 0
        break
    
print(cnt if em == 12 else 0)

기존까지의 문제와 다르게 기간이 정해진 문제라서 cm, cd, em, ed 이렇게 현재와 끝 두 가지 변수를 유지했다.

cm, cd는 현재 꽃이 다음 피는 기간보다 빠르다면 cm, cd를 업데이트 하고 업데이트 된 cm과 em을 가지고 현재 꽃과 다시 비교해서 꽃이 끊기지 않고 계속 피게 된다면 em, ed를 업데이트하고 아니라면 cnt를 0으로 설정하고 반복문을 중단했다.

사실 이렇게 풀긴했는데 아직 로직이 잘 이해가 안 가서 특히 처음 cnt를 1로 시작하는 거나, cm cd와 em ed를 둘 다 유지할 필요가 있는가 등에 의문이 있어서 문제를 조금 더 살펴봐야할 것 같다.

profile
사용자불량

0개의 댓글