다이아몬드 핸즈
면접 대비시간 제한2초메모리 제한512 MB
여러 시점의 주가 차이가 주어질 때, 1일부터 d_n까지 +1일과 -1일이 이어지는 구간을 최소 개수로 복원하고, 불가능하면 -1을 출력한다.
문제
"Diamond Hands" 기업은 길고 다사다난한 역사를 가지고 있다. 창립 이래로 성공적인 날과 그렇지 않은 날이 많이 있었다. 편의상 주가가 1(추상적인 단위)만큼 오른 날을 성공적인 날이라고 하자. 마찬가지로 주가가 1만큼 내린 날을 성공적이지 않은 날이라고 하자. 흔히 그렇듯이, 성공적인 날들은 긴 연속으로 이어지고, 성공적이지 않은 날들도 마찬가지다. 중간은 없다. 모든 날은 성공적이거나 성공적이지 않다.
이 기업에게 어떤 날이 성공적이었고 어떤 날이 성공적이지 않았는지 알아내고 싶다. 그러기 위해 역사적 주가 데이터를 얻었다. 개의 쌍 은 주식을 발행한 지 일이 지난 후 시작 주가와의 차이가 단위라는 뜻이다(는 음수를 포함한 임의의 정수일 수 있다).
기업의 역사를 최소 개수의 성공적인 날 또는 성공적이지 않은 날의 연속으로 나타내거나, 데이터에 오류가 있어 불가능하다고 보고하라. 최소 개수의 연속을 이루는 답이 여러 개라면 아무거나 하나 출력하라.
입력
첫째 줄에 정수 이 주어진다(). 다음 개의 줄에는 각각 두 정수 가 주어진다(; ; 인 모든 에 대해 ).
출력
역사적 주가 데이터에 오류가 있으면 을 출력한다. 그렇지 않으면 첫째 줄에 연속의 개수 를 출력한다. 다음 개의 줄에는 성공적인 날 또는 성공적이지 않은 날의 연속을 설명한다. 각 줄에는 쌍 가 있어야 하며(; ), 이는 다음 연속이 일 동안 지속되었고, 이면 성공적이었고 이면 성공적이지 않았음을 뜻한다.
연속에 대한 설명은 주식을 발행한 날부터 일까지 시간 순서대로 이루어져야 한다. 즉, 모든 의 합은 과 같아야 한다.
힌트
첫 번째 예에서 처음 3일은 성공적이므로 2일 후 차이는 2이고, 3일 후 차이는 3이다. 다음 3일은 성공적이지 않으므로 5일 후 차이는 1이 되고, 6일 후 주가는 초기값으로 돌아온다. 마지막 7일째는 성공적이므로 7일 후 최종 차이는 1이다.