Japanski Junak
면접 대비시간 제한1초메모리 제한1024 MB
스도쿠 판에 교차 빗금 방법을 반복 적용해 빈칸을 채우고, 판이 잘못되었거나 모순이 생기면 GRESKA를 출력합니다.
문제
Akihise Wada는 요코하마 출신의 불교 승려입니다. 처음 들으면 평범하게 느껴지지만, Aki는 Hajduk Split의 열성 팬이자 오랫동안 Torcida의 회원이고 크로아티아 문화를 좋아하는 사람이기도 합니다. 스플리트 축구계에서는 그가 경기가 끝날 때마다 Marko Livaja와 직접 연락을 주고받는다는 소문이 돌고 있습니다. 이 문제는 Instagram에서 실제로 주고받은 다음 메시지(완전히 사실입니다)에서 영감을 얻었습니다.
Marko: 'Aki, 그 스도쿠라는 게임 어떻게 하는 건지 나한테 설명 좀 해 줄래? 난 그거 하나도 못 알아듣겠어. . . '
Aki: 'Marko-san, 스도쿠를 푸는 일은 오래된 예술이라서 평생을 바칠 만한 일입니다.'
Marko: '나 무슨 대단한 고수 되려는 것도 아니고, 훈련 끝나고 24시간 안에 이거 후딱 풀고 싶은 거야. 우리 할머니도 푸는 건데.'
Aki: '그럼 cross-hatching은 이미 충분히 익혔고, 잘하고 있네요.'
Marko: 'Cross가 뭐야? 난 크로스 올리는 건 세계 최고인데.'
짐작하셨겠지만, 크로스해칭(cross-hatching) 방법으로 스도쿠 퍼즐을 푸는 프로그램을 작성해야 합니다.
스도쿠의 목표는 9 × 9 정사각형 보드에 1부터 9까지의 숫자를 넣되, 모든 행, 모든 열, 모든 3 × 3 블록에 1부터 9까지의 숫자가 각각 한 번씩 들어가도록 하는 것입니다.
크로스해칭은 다음과 같이 진행합니다. 먼저 1부터 9까지 숫자 중 하나를 고릅니다. 그 숫자가 보드에 나타날 때마다, 그 숫자가 있는 행, 열, 3 × 3 블록에는 그 숫자를 넣을 수 없다고 표시합니다. 그다음 아직 그 숫자가 없는 3 × 3 블록을 찾고, 그 블록에서 그 숫자를 넣을 수 있는 칸이 딱 한 곳뿐이면 그 칸에 숫자를 씁니다.
주어진 보드는 일부만 채워져 있습니다. 크로스해칭을 반복해서 적용하여 빈 칸을 가능한 한 많이 정확하게 채우십시오.
초기 보드는 불법일 수 있습니다. 즉, 같은 행, 열, 3 × 3 블록 안에 같은 숫자가 두 번 이상 나올 수 있습니다. 또한 풀이 도중 어떤 블록에도 특정 숫자를 넣을 수 없는 상황에 부딪힐 수 있습니다. 이 두 경우 모두 오류를 보고해야 합니다.
입력
입력의 아홉 줄 각각에는 스도쿠 퍼즐을 나타내는 문자가 정확히 아홉 개씩 있습니다. 모든 문자는 1부터 9까지의 숫자이거나 빈 칸을 뜻하는 점(.)입니다.
출력
초기 보드가 불법이거나 풀이 중 모순에 부딪히면 GRESKA라고 출력합니다. 그렇지 않으면 입력과 같은 형식으로 보드를 출력하되, 크로스해칭을 반복해서 값을 확정할 수 있는 칸을 채워 출력합니다.