시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 (추가 시간 없음) | 1024 MB (추가 메모리 없음) | 686 | 156 | 114 | 27.338% |
자취 $1$년 차 한별이는 슬슬 냉장고에 있는 음식들의 유통기한이 지나지 않았을지 걱정이다. 그러나 유통기한으로 적혀 있는 날짜의 연도/월/일 순서를 알 수 없어서 고민하고 있다.
날짜를 표기하는 방법은 국가에 따라 다르며, 크게 세 가지 방법이 있다.
따라서 예를 들어 10/12/32
라는 날짜는
중 하나가 된다. $12$월 $32$일이라는 날짜는 없으므로 적어도 연도/월/일 형식($2010$년 $12$월 $32$일)은 아니라는 것을 알 수 있다.
한별이는 냉장고 음식들의 유통기한을 보고 세 가지 방법 중 유효한 날짜로 해석 가능한 어떤 형식으로 해석해도 음식이 안전한지 알고 싶다. 한별이를 도와 음식이 안전한지 판단하는 프로그램을 작성해 보자.
첫 번째 줄에 오늘 날짜를 나타내는 정수 $Y$, $M$, $D$가 공백으로 구분되어 주어진다. 이는 오늘이 $\left(2000+Y\right)$년 $M$월 $D$일이라는 것을 의미한다. ($0 \le Y \le 99$, $\left(2000+Y\right)$년 $M$월 $D$일은 올바른 날짜)
다음 줄에는 냉장고의 음식의 개수 $N$이 주어진다. ($1 \le N \le 300\,000$)
다음 $N$개의 줄에는 각 줄마다 음식의 유통기한을 나타내는 정수 $A$, $B$, $C$가 공백으로 구분되어 주어진다. 음식에는 유통기한이 $A$/$B$/$C$의 형식으로 적혀 있다. ($0 \le A, B, C \le 99$)
모든 날짜는 $2000$년에서 $2099$년 사이이며, 연도는 $100$으로 나눈 나머지만이 주어진다.
각 날짜마다 한 줄에 하나씩 다음 중 한 가지를 출력한다.
invalid
: 어떤 형식으로 해석해도 올바르지 않은 날짜인 경우safe
: 해석 가능한 모든 형식에 대해 오늘 날짜가 유통기한보다 이전이거나 같은 날일 경우unsafe
: 나머지 경우22 11 26 4 22 11 30 22 11 31 22 12 1 22 22 22
safe safe unsafe invalid
22/11/30
은 $2022$년 $11$월 $30$일 또는 $2030$년 $11$월 $22$일로 해석할 수 있다.22/11/31
은 $2031$년 $11$월 $22$일로만 해석할 수 있다.22/12/01
은 $2022$년 $12$월 $1$일 또는 $2001$년 $12$월 $22$일로 해석할 수 있다. 후자의 경우 유통기한이 $2001$년까지일 가능성이 있어서 안전하지 않다.22/22/22
는 어떤 형식으로 해석해도 올바른 날짜가 아니다.$1$월, $3$월, $5$월, $7$월, $8$월, $10$월, $12$월은 각각 $31$일까지 있다.
$4$월, $6$월, $9$월, $11$월은 각각 $30$일까지 있다.
$2$월은 윤년인 경우 $29$일, 윤년이 아닌 경우 $28$일까지 있다. 문제에서 주어지는 연도에 한정할 경우, $4$로 나누어떨어지는 연도는 모두 윤년이다.