백업
면접 대비시간 제한2초메모리 제한256 MB
요일별 백업 레벨 일정과 복구 날짜가 주어질 때, 복구에 필요한 백업들의 요일을 날짜와 레벨이 증가하는 순서로 출력한다.
문제
백업에는 여러 가지 전략이 있다. 가장 이해하기 쉬운 것은 차등 백업과 증분 백업이다.
증분 백업에서는 마지막 백업 이후 변경된 데이터를 복사한다. 예를 들어 일요일에 전체 백업을 한 뒤 월요일에는 월요일 동안 변경된 데이터를 복사하고, 화요일에도 같은 방식으로 한다. 이 전략에서는 복사하는 데이터의 양이 비교적 적지만, 데이터를 복원하는 데 많은 파일이 필요할 수 있다. 예를 들어 금요일의 데이터를 복원하려면 일요일(전체 백업), 월요일, 화요일, 수요일, 목요일의 백업본이 필요하다.
차등 백업에서는 정기적으로 전체 복사본을 만든다. 예를 들어 매주 일요일에 만든다. 그다음 주중 각 요일에는 마지막 전체 백업 이후 변경된 모든 데이터를 복사한다. 월요일에는 월요일 복사본을, 화요일에는 월요일과 화요일의 복사본을 만드는 식이다. 백업하는 데이터의 총량은 비교적 크지만, 데이터를 복원하는 데에는 마지막 차등 백업과 마지막 전체 백업, 두 파일만 있으면 된다.
널리 쓰이는 무료 백업 프로그램인 Dump(1)은 백업 레벨이라는 개념으로 동작한다. 이는 증분 백업이나 차등 백업은 물론, 앞의 두 방법으로는 표현할 수 없는 더 복잡한 전략도 수행할 수 있다. 백업 레벨의 개념 자체는 꽤 단순하다. 레벨 백업을 할 때에는 보다 낮은 레벨의 마지막 백업 이후 변경된 모든 파일을 복사한다. 앞서 수행한 더 낮은 레벨의 백업이 없으면 모든 데이터를 완전히 복사한다.
백업 일정이 주어졌을 때, 복구에 어떤 백업 파일을 사용해야 하는지 알아내는 프로그램을 작성하시오.
입력
입력 파일의 첫 줄에는 전체 테스트의 수 이 주어진다().
그다음 줄부터는 공백으로 구분된 정수 여덟 개가 한 줄에 주어진다. 처음 일곱 수는 백업 일정, 즉 해당 요일에 수행하는 백업의 레벨 이다. 일요일, 월요일, 화요일 등의 순서이다(). 일요일에는 0 레벨 백업을 수행하므로 첫 번째 수는 0임이 보장된다.
여덟 번째 수는 데이터를 복구해야 하는 요일 이다(). 은 일요일, 은 토요일이다.
출력
출력 파일의 각 줄에는 복구에 필요한 백업본을 만든 요일 를 순서대로 출력한다(). 가장 이른 백업본을 먼저 복구하고 그다음으로 이른 백업본을 복구하므로 이고 을 만족해야 한다. 또한 복구는 항상 가장 최근 백업본으로 끝나므로 줄의 마지막 수는 여야 한다.