https://www.acmicpc.net/problem/2457
3월1일부터 11월30일까지 꽃이 한 번도 안 지게 꽃을 선택하는 문제이다.
가로등 문제랑 비슷한줄알고 비슷하게 접근하려고 했다가 실패했다.
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를 둘 다 유지할 필요가 있는가 등에 의문이 있어서 문제를 조금 더 살펴봐야할 것 같다.