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

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

확장판 라이트 아웃

면접 대비

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

요약
5행 6열 Lights Out 보드가 주어질 때 모든 불을 끄는 유일한 버튼 입력 조합을 찾아 입력 그리드를 출력한다.
난이도

보통10점 중 5점

유형
완전 탐색, 비트 연산, 시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

라이트 아웃(Lights Out®)은 켜져 있는 불을 모두 끄는 퍼즐이다. 이 확장판의 판은 한 줄에 6개씩, 5줄로 배치된 버튼으로 이루어진다. 즉 5행 6열이다. (원래 퍼즐은 5행 5열이다.) 각 버튼에는 불이 하나씩 달려 있다. 어떤 버튼을 누르면 그 버튼과 상·하·좌·우로 맞닿은 (최대 네 개의) 이웃 버튼의 불 상태가 함께 반전된다. 즉 켜져 있던 불은 꺼지고, 꺼져 있던 불은 켜진다. 따라서 모서리에 있는 버튼은 불 3개를, 가장자리에 있는 버튼은 불 4개를, 그 밖의 버튼은 불 5개를 바꾼다. 예를 들어 아래 왼쪽 그림에서 X로 표시된 버튼들을 누르면 화면이 오른쪽 그림처럼 바뀐다.

게임의 목표는 임의의 초기 상태에서 시작하여 버튼을 눌러 모든 불을 끄는 것이다. 인접한 버튼을 누르면 한 버튼의 효과가 다른 버튼의 효과를 상쇄할 수 있다. 예를 들어 아래 그림에서 2행 3열 버튼과 2행 5열 버튼을 누르면, 두 버튼 모두 2행 4열의 불을 반전시키므로 결국 2행 4열의 상태는 바뀌지 않는다.

참고:

  1. 버튼을 누르는 순서는 결과에 영향을 주지 않는다.
  2. 같은 버튼을 두 번 누르면 첫 번째 누름의 효과가 정확히 취소되므로, 어떤 버튼도 두 번 이상 누를 필요가 없다. 즉 각 버튼은 누르거나(1) 누르지 않거나(0) 둘 중 하나다.
  3. 둘째 줄의 대응하는 버튼을 누르면 첫째 줄의 불을 모두 끌 수 있다. 이 과정을 각 줄에 반복하면 처음 네 줄의 불을 모두 끌 수 있다. 마찬가지로 2열, 3열, …의 버튼을 누르면 처음 다섯 열의 불을 모두 끌 수 있다.

각 퍼즐에 대해 눌러야 할 버튼을 구하는 프로그램을 작성하라.

입력

입력의 첫 줄에는 뒤따르는 퍼즐의 개수를 나타내는 양의 정수 nn이 주어진다. 각 퍼즐은 다섯 줄로 이루어지며, 각 줄에는 하나 이상의 공백으로 구분된 여섯 개의 0 또는 1이 놓인다. 0은 그 자리의 불이 처음에 꺼져 있음을, 1은 켜져 있음을 뜻한다.

출력

각 퍼즐에 대해 먼저 PUZZLE #m 형식의 문자열을 한 줄에 출력한다. 여기서 mm은 입력에서 그 퍼즐의 순번(1부터 시작)이다. 그 다음 줄부터는 입력과 같은 형식의 5행 6열 표를 출력한다. 이 표에서 1은 퍼즐을 풀기 위해 눌러야 하는 버튼을, 0은 누르지 않는 버튼을 나타낸다. 한 줄 안에서 각 0 또는 1 사이에는 정확히 하나의 공백을 둔다.

해는 항상 존재하며 유일하다.

예제4

  1. 예제 1

    입력
    2
    0 1 1 0 1 0
    1 0 0 1 1 1
    0 0 1 0 0 1
    1 0 0 1 0 1
    0 1 1 1 0 0
    0 0 1 0 1 0
    1 0 1 0 1 1
    0 0 1 0 1 1
    1 0 1 1 0 0
    0 1 0 1 0 0
    
    예상 출력
    PUZZLE #1
    1 0 1 0 0 1
    1 1 0 1 0 1
    0 0 1 0 1 1
    1 0 0 1 0 0
    0 1 0 0 0 0
    PUZZLE #2
    1 0 0 1 1 1
    1 1 0 0 0 0
    0 0 0 1 0 0
    1 1 0 1 0 1
    1 0 1 1 0 1
    
  2. 예제 2

    입력
    1
    0 0 0 0 0 0
    0 0 0 0 0 0
    0 0 0 0 0 0
    0 0 0 0 0 0
    0 0 0 0 0 0
    
    예상 출력
    PUZZLE #1
    0 0 0 0 0 0
    0 0 0 0 0 0
    0 0 0 0 0 0
    0 0 0 0 0 0
    0 0 0 0 0 0
    
  3. 예제 3

    입력
    1
    1 1 1 1 1 1
    1 1 1 1 1 1
    1 1 1 1 1 1
    1 1 1 1 1 1
    1 1 1 1 1 1
    
    예상 출력
    PUZZLE #1
    0 0 1 1 0 0
    1 0 1 1 0 1
    0 1 0 0 1 0
    1 0 1 1 0 1
    0 0 1 1 0 0
    
  4. 예제 4

    입력
    1
    1 0 1 0 1 0
    0 1 0 1 0 1
    1 0 1 0 1 0
    0 1 0 1 0 1
    1 0 1 0 1 0
    
    예상 출력
    PUZZLE #1
    0 0 1 0 0 0
    1 1 0 1 1 0
    0 1 1 1 0 0
    1 1 0 1 1 0
    0 0 1 0 0 0