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

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

함선

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

요약
격자에 놓인 일곱 개 테트로미노 배의 일부 정보가 주어질 때, 일관된 모든 배치에서 실수 한 번 이하로 28개 배 칸을 모두 밝힐 수 있는지 판정한다.
난이도

어려움10점 중 8점

유형
백트래킹, 완전 탐색, 구현
정답자
아직 제출이 없습니다

문제

두 사람이 격자에 함선을 숨겨 놓고 상대 함선의 위치를 번갈아 맞히는 놀이가 있다. 이 문제에서 상대는 직사각형 격자 위에 아래 일곱 가지 모양을 하나씩, 모두 일곱 척 배치했다.

xx  xx    xx  x      x   x
xx   xx  xx   xxx  xxx  xxx  xxxx

모양은 저마다 정확히 네 칸을 덮으므로 함선 일곱 척이 덮는 칸은 모두 28칸이다. 함선은 회전할 수 있지만 뒤집을 수는 없다. 모든 함선은 직사각형 안에 완전히 들어가고 서로 겹치지 않는다. 다른 함선이나 테두리에 닿는 것은 괜찮다.

게임은 이미 진행 중이고 몇 칸은 이미 열려 있다. 지금 알고 있는 내용을 담은 격자가 주어진다. 각 칸은 다음 세 문자 중 하나다.

  • 함선이 덮은 칸은 x
  • 함선이 없는 칸은 o
  • 아직 열지 않은 칸은 .

이제 . 칸을 한 번에 하나씩 열어 나간다. 앞서 연 칸의 결과를 보고 다음에 열 칸을 정해도 된다. 함선이 있는 칸을 열면 명중, 빈 칸을 열면 빗나감이다. 지금 아는 내용과 어긋나지 않는 배치가 어느 것이든, 빗나감을 최대 한 번만 겪으면서 함선 칸 28개를 모두 열 수 있는지 판단하라. 운 좋게 찍어야만 통하는 순서는 인정하지 않는다.

지금 아는 내용만으로 함선 칸 28개가 이미 정해진다면 빗나감은 한 번도 필요 없다. 그렇지 않다면 빗나감을 한 번 쓸 수 있고, 그 결과를 알고 난 뒤에는 실제 배치가 무엇이든 함선 칸이 하나로 정해져야 한다.

입력으로 주어지는 격자에는 언제나 배치가 하나 이상 존재한다.

입력

입력은 여러 개의 상황으로 이루어진다. 각 상황은 격자의 너비 ww와 높이 hh를 담은 줄로 시작하며, 2≤w,h≤162 \le w, h \le 16이다.

이어지는 hh개의 줄에는 각각 x, o, . 중 하나로 이루어진 길이 ww의 문자열이 온다.

상황 사이에는 빈 줄이 들어갈 수 있다. 입력은 w=0w = 0이고 h=0h = 0인 상황으로 끝나며, 이 상황은 처리하지 않는다.

출력

각 상황마다 먼저 Game #k 줄을 출력한다. kk는 그 상황이 입력에 나온 순서이고 1부터 센다. 다음 줄에는 빗나감을 최대 한 번만 겪으면서 함선 칸을 모두 열 수 있으면 yes.를, 그렇지 않으면 no.를 출력한다.

이웃한 두 상황 사이에는 빈 줄을 하나 출력한다. 마지막 상황 뒤에는 빈 줄을 출력하지 않는다.

예제2

  1. 예제 1

    입력
    10 10
    .x..x.....
    oooooxoooo
    oxooxxx...
    xxoooooo..
    xoooxooo..
    ooxxxxoo..
    oooooxxoox
    ooooooxoox
    ooooooooxx
    oooooooooo
    
    
    0 0
    
    예상 출력
    Game #1
    yes.
    
  2. 예제 2

    입력
    10 10
    oxxxxooooo
    oooooxoooo
    oxooxxxoxx
    xxooooooxx
    xoooxooooo
    ooxxxxoooo
    oooooxxoox
    ooooooxoox
    ooooooooxx
    oooooooooo
    
    10 10
    oxxxxooooo
    oooooxoooo
    oxooxxxo..
    xxoooooo..
    xoooxooooo
    ooxxxxoooo
    oooooxxoox
    ooooooxoox
    ..o..oooxx
    ..o..ooooo
    0 0
    
    예상 출력
    Game #1
    yes.
    
    Game #2
    no.