아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

경제적인 통화 기록

면접 대비

시간 제한1초메모리 제한128 MB

요약
시간순으로 정렬된 통화 기록에서 반드시 남길 항목은 유지하면서, 남긴 항목에 연도 복원 규칙을 적용해도 원래 연도가 나오도록 최소 개수의 항목을 고른다.
난이도

보통10점 중 6점

유형
동적 계획법, 그리디, 정렬, 구현
정답자
아직 제출이 없습니다

문제

당신이 오래전에 산 휴대폰에는 걸려 온 모든 통화를 기록하는 내장 메모리가 있다. 통화마다 날짜(월과 일), 시각(시와 분), 그리고 발신 번호가 저장된다. 당시에는 메모리가 비쌌기 때문에 저장할 수 있는 통화 수에는 한계가 있다.

기록이 거의 가득 차서 일부 항목을 지우려고 한다. 어떤 항목을 지울지 고를 때 다음 두 가지 조건을 지켜야 한다.

  1. 반드시 남겨야 하는 중요한 항목이 있다.
  2. 남기는 모든 통화에 대해, 휴대폰이 저장하지 않는 연도를 아래 절차로 복원할 수 있어야 한다.

두 조건을 모두 만족시키면서 남겨야 하는 항목 수의 최솟값을 구하라.

연도 복원 방법

시각(월, 일, 시, 분)만 담긴 통화 목록이 시간순으로 주어졌을 때, 각 통화의 연도는 다음과 같이 복원한다.

  1. 목록의 마지막 통화는 올해에 이루어졌다.
  2. 어떤 통화의 시각을 tt, 바로 앞 통화의 시각을 t′t'라 하자. t′<tt' < t이면 두 통화는 같은 해에 일어난 것으로 본다. t′≥tt' \ge t이면 앞 통화는 한 해 전에 일어난 것으로 본다.
  3. 목록을 뒤에서 앞으로 옮겨 가며 2번 규칙을 반복해서 적용한다.

이 절차가 일반적으로 항상 옳지는 않지만, 주어지는 입력에서는 실제 연도를 정확히 복원한다고 가정해도 된다. 항목을 지운 뒤에도, 줄어든 기록에 같은 절차를 적용했을 때 남은 모든 통화의 연도가 원래와 똑같이 나와야 한다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 기록에 담긴 항목 수 nn(1≤n≤10001 \le n \le 1000)이 적힌 줄로 시작한다. 이어지는 nn개의 줄에는 항목이 하나씩 주어진다.

각 항목의 형식은 mm:dd:HH:MM number ±이다. 월 mm, 일 dd, 시 HH, 분 MM, 발신 번호 number(1자리에서 16자리), 그리고 마지막에 표시 하나가 온다. +는 반드시 남기려는 통화, -는 그 밖의 통화를 뜻한다. 항목은 휴대폰에 저장된 그대로, 즉 통화를 받은 시간 순서대로 주어진다(마지막 항목이 가장 최근이다).

위 복원 절차가 모든 통화의 연도를 정확히 복원한다고 가정해도 된다.

마지막 테스트 케이스 다음에는 0만 적힌 줄이 오며, 이 줄은 처리하지 않는다.

출력

각 테스트 케이스마다, 두 조건을 만족시키기 위해 남겨야 하는 항목 수의 최솟값을 한 줄에 하나씩 출력한다. 특히, 남긴 항목들에 복원 절차를 적용했을 때 각 항목의 연도가 원래 기록에서와 똑같이 나와야 한다.

예제1

  1. 예제 1

    입력
    7
    12:31:23:59 0123456789012345 +
    07:21:19:00 1337 -
    01:01:00:00 0987654321 -
    07:21:14:00 1337 -
    11:11:11:11 11111111111 +
    01:01:00:00 0123456789 +
    01:01:00:00 0987654321 -
    0
    
    예상 출력
    6