[BOJ 14704] 타일 뒤집기 (Hard)

View as PDF

Submit solution

Points: 5
Time limit: 1.0s
Memory limit: 512M

Problem types
Allowed languages
Assembly, Awk, C, C++, Java, Pascal, Perl, Python, Sed, Text

지구이는 신기한 게임판을 가지고 있다. 이 게임판에는 한 면은 검은색, 한 면은 흰색으로 칠해진 타일이 N행 N열으로 배치되어 있다. 각 타일은 제자리에서 뒤집을 수 있는데, 타일 하나를 뒤집으면 그 타일과 상하좌우로 인접한 타일들이 같이 뒤집힌다. 지구이는 타일들이 무작위로 배치된 게임판에서 타일들을 적당히 뒤집어서 모든 타일이 흰색 면이 위를 향하도록 만드는 놀이를 좋아한다.</p>

어느 날, 지구이가 게임판을 가지고 놀다가 자리를 비운 사이 지구이의 동생이 이 게임판을 발견했다. 지구이의 동생은 놀이의 규칙을 모르기 때문에, 그냥 처음 상태에서 검은색 면이 위를 향하고 있는 타일들을 전부 한 번씩 뒤집어 보았다. 그러자 놀랍게도 모든 타일이 흰색 면이 위를 향하게 되었다!

돌아온 지구이는 동생에게 놀이의 규칙을 알려 주려고 했지만, 그 전에 동생이 즐거워하는 모습을 더 보고 싶어져서 같은 특징을 갖는 게임판을 몇 번 더 만들어 주기로 했다. 지구이는 멋진 해커이기 때문에 게임판의 규칙을 따르지 않고 원하는 타일들만 따로 뒤집어서 원하는 색 배치를 만들 수 있다. 하지만 아무 조건 없이 타일을 뒤집는 것은 별로 재미가 없었기 때문에, 지구이는 게임판에서 몇 개의 타일들은 뒤집지 않고 원하는 배치를 만들어 보기로 했다.

입력 형식

첫 번째 줄에 게임판의 크기 N(1 ≤ N ≤ 1, 000)이 주어진다.</p>

두 번째 줄부터 N개의 줄에 걸쳐 게임판의 타일들의 상태를 나타내는 N글자의 문자열이 주어진다. 문자열은 #., -만으로 이루어져 있으며, #는 검은색 면이 위를 향하도록 고정된 타일, .는 흰색 면이 위를 향하도록 고정된 타일, -는 지구이가 마음대로 뒤집을 수 있는 타일을 의미한다.

출력 형식

N개의 줄에 걸쳐 지구이의 동생이 검은색 면이 위를 향하고 있는 타일들을 전부 한 번씩 뒤집어서 모든 타일이 흰색 면이 위를 향하도록 만들 수 있는 게임판의 모양을 출력한다. 입력 조건과 마찬가지로 검은색 면이 위를 향하고 있는 타일은 #, 흰색 면이 위를 향하고 있는 타일은 .로 나타낸다.</p>

답이 여러 가지일 경우 아무것이나 출력하고, 답이 존재하지 않을 경우 thinking_face를 출력한다.

예제 입력 1

4
-.--
---#
--.-
.---

예제 출력 1

#.#.
...#
#...
.#.#

예제 입력 2

7
---.---
-----.-
--#----
.------
------#
-.-----
----#--

예제 출력 2

#.#.###
....#.#
#.#####
..#.#..
#####.#
#.#....
###.#.#

예제 입력 3

5
----#
#--.-
-#---
----.
--.--

예제 출력 3

thinking_face

Comments

There are no comments at the moment.