고장난 피아노
면접 대비시간 제한0.5초메모리 제한1024 MB
고장난 건반 목록과 MIDI 곡이 주어질 때, 연주할 수 없는 음의 개수와 곡 전체를 연주할 수 있게 하는 최소 이조 값을 구합니다.
문제
MIDI(Musical Instrument Digital Interface)는 악곡을 기술하는 기술 표준이다. 각 음은 범위의 정수로 표현된다. 키가 개인 피아노로 MIDI 형식의 곡을 연주하려 한다. 가장 왼쪽 키는 MIDI 코드 에 대응하고, 왼쪽에서 두 번째 키는 코드 에 대응하며, 이후도 같은 방식이다.
안타깝게도 이 피아노는 오래되어 일부 키가 고장 났다. 어떤 키가 작동하고 어떤 키가 작동하지 않는지는 알고 있다. 곡을 연주하는 동안 작동하는 키가 고장 나지 않으며, 고장 난 키가 다시 작동하지도 않는다.
다음 값을 구하는 프로그램을 작성하라.
- 피아노로 연주할 수 없는 음의 개수
- 곡을 피아노로 연주하기 위해 필요한 최소 전조(transposition) 값
전조는 곡의 모든 음을 같은 값만큼 위나 아래로 옮기는 것이다. 반음 위로 전조하면 각 음 대신 오른쪽 이웃 키가 연주된다. 반음 아래로 전조하면 왼쪽 이웃 키가 연주된다. 두 반음 위로 전조하면 두 칸 오른쪽 키가 연주되는 식이다. 반음 위로 전조할 때 MIDI 코드 의 음은 대응하는 키가 없어서 연주할 수 없다.
입력
첫 줄에 고장 난 키의 개수 이 주어진다 (). 둘째 줄에는 고장 난 키의 MIDI 코드 () 개가 주어지며, 모두 서로 다르다. 셋째 줄에는 곡의 음 개수 ()이 주어진다. 넷째 줄에는 음의 MIDI 코드 () 개가 주어진다.
출력
두 줄을 출력한다. 첫째 줄에는 피아노로 연주할 수 없는 음의 개수를 출력한다. 둘째 줄에는 곡을 연주할 수 있게 하는 전조의 반음 수를 출력한다. 가능한 전조가 여러 개라면 절댓값이 가장 작은 것을 출력한다. 어떤 전조로도 연주할 수 없다면 둘째 줄에 X를 출력한다. 풀이가 전조 값을 찾지 못하면 둘째 줄에 E를 출력한다.