[๋ฌธ์ ๋งํฌ] ๐https://www.acmicpc.net/problem/5212
ํ์ด ๋ฐฉ๋ฒ
์ด ๋ฌธ์ ๋ ์ฃผ์ด์ง ์ง๋๋ฅผ ๋ฏธ๋์ ์ํ๋ก ๋ณํํ๊ณ , ๋ถํ์ํ ๋ฐ๋ค ๋ถ๋ถ์ ์ ๊ฑฐํด ๊ฐ์ฅ ์ธ๊ณฝ์ ๋ ๋ง ์ถ๋ ฅํ๋ ๋ฌธ์ ์ด๋ค.
1๏ธโฃ ์ด๊ธฐ๊ฐ ์ค์
dx = [1, 0, -1, 0] # x(ํ)
dy = [0, -1, 0, 1] # y(์ด)
future_map = [["."]*C for _ in range(R)] # ๋ฏธ๋ ์ง๋ ์์ฑ
- ์ง๋๋ฅผ ์ํํ๋ฉด์ ๊ฐ X(๋ ) ์ฃผ์์ ๋ฐ๋ค๊ฐ 3์นธ ์์ผ๋ฉด ๋ ์ด ์ ๊ธฐ๋๋ก ํ๋ค.
- ์๋ก์ด ๋ฏธ๋ ์ง๋๋ฅผ future_map ์ด๋ผ๊ณ ํ๊ณ , ๋ชจ๋ "." (๋ฐ๋ค)๊ฐ ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด์ ์์ฑํ๋ค.
- dx, dy ๋ ์ํ์ข์ฐ ํ์ธ์ ํ์ํ ์ขํ์ด๋ค.
2๏ธโฃ ๋ฏธ๋ ์ง๋ ์์ฑ
for x in range(R):
for y in range(C):
sea = 0
if maps[x][y] == "X": # ๋
์ด๋ฉด ์ฃผ์๊ฐ ๋ฐ๋ค์ธ์ง ํ์
for i in range(4): # ์ฃผ๋ณ ํ์
nx = dx[i] + x
ny = dy[i] + y
if nx < 0 or nx >= R or ny < 0 or ny >= C: # ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด
sea += 1
elif maps[nx][ny] == ".": # ์ธ์ ํ ๊ณณ์ด ๋ฐ๋ค์ด๋ฉด
sea += 1 # ๋ฐ๋ค ๊ฐ์ ์นด์ดํธ
if sea < 3: # ์ธ์ ํ ๋ฐ๋ค๊ฐ ์ธ ์นธ ๋ฏธ๋ง์ด๋ฉด
future_map[x][y] = "X" # ๋
์ผ๋ก ๋ฐ๊พธ๊ธฐ

- if maps[x][y] == "X":
- ํ์ฌ ์ง๋๋ฅผ ํ์ํ๋ค๊ฐ "X"(๋ )๋ฅผ ๋ง๋๋ฉด ์ฃผ๋ณ์ ํ์ํ๋ค. (์ํ์ข์ฐ ํ์ธ)
- if nx < 0 or nx >= R or ny < 0 or ny >= C:
- ์ฃผ๋ณ์ ํ์ํ๋ค๊ฐ ์ง๋์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด ๋ฐ๋ค ๊ฐ์๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
- ์ง๋์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ค๋ ๊ฒ์ ํ์ํ๋ ค๋ ์์น๊ฐ ์ฃผ์ด์ง ์ง๋ ์์น์ ์๋ค๋ ๋ง์ด๋ค.
- ์ง๋์ ์๋ ์นธ์ด๋ ์ง๋์ ๋ฒ์ด๋๋ ๊ฒ์ ๋ชจ๋ ๋ฐ๋ค์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋ค์ ๊ฐ์๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
- elif maps[nx][ny] == ".":
- ์ง๋์ ๋ฒ์๋ฅผ ๋ฒ์ด๋์ง ์๊ณ , ์ธ์ ํ ๊ณณ์ด "."(๋ฐ๋ค)์ด๋ฉด ๋ฐ๋ค ๊ฐ์๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
- if sea < 3:
- ์ธ์ ํ ๋ฐ๋ค๊ฐ ์ธ ์นธ ๋ฏธ๋ง์ด๋ฉด, ๋ฏธ๋ ์ง๋์์ ํ์ฌ ์์น๋ฅผ "X"(๋ ) ์ผ๋ก ์ ์ฅํ๋ค.
3๏ธโฃ ๋ฏธ๋ ์ง๋์์ ๋ ์ ์์ญ ์ฐพ๊ธฐ

min_row, max_row = R, 0
min_col, max_col = C, 0
for x in range(R):
for y in range(C):
if future_map[x][y] == "X":
min_row = min(min_row, x)
max_row = max(max_row, x)
min_col = min(min_col, y)
max_col = max(max_col, y)
- ๋ชจ๋ ๋ (X)์ ํฌํจํ๋ ๊ฐ์ฅ ์์ ์ง์ฌ๊ฐํ ๋ฒ์๋ฅผ ์ฐพ์ ์ต์ ๋ฐ ์ต๋ ํ๊ณผ ์ด์ ๊ธฐ๋กํ๋ค.
- ์ด๋ฅผ ํตํด ํ์ํ ๋ ๋ง ํฌํจํ๋ ์ต์ ์ธ๊ณฝ ์์ญ์ ๊ตฌํ๋ค.
4๏ธโฃ ์ถ๋ ฅ
- ์์์ ์ฐพ์ ์ต์ ํ๋ถํฐ ์ต๋ ํ, ์ต์ ์ด๋ถํฐ ์ต๋ ์ด ๋ฒ์ ๋ด์ future_map๋ง ์ถ๋ ฅํ๋ค.
- ๋ถํ์ํ ๋ฐ๋ค ๋ถ๋ถ์ด ์ ์ธ๋, ๋ฌธ์ ์์ ์๊ตฌํ๋ ๊ฒฐ๊ณผ๋ง์ ๋ณด์ฌ์ค ์ ์๋ค.
Solution
R, C = map(int, input().split())
maps = [input().strip() for _ in range(R)]
dx = [1, 0, -1, 0]
dy = [0, -1, 0, 1]
future_map = [["."]*C for _ in range(R)]
for x in range(R):
for y in range(C):
sea = 0
if maps[x][y] == "X": # ๋
์ด๋ฉด ์ฃผ์๊ฐ ๋ฐ๋ค์ธ์ง ํ์
for i in range(4):
nx = dx[i] + x
ny = dy[i] + y
if nx < 0 or nx >= R or ny < 0 or ny >= C: # ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด
sea += 1
elif maps[nx][ny] == ".": # ์ธ์ ํ ๊ณณ์ด ๋ฐ๋ค์ด๋ฉด
sea += 1 # ๋ฐ๋ค ๊ฐ์ ์นด์ดํธ
if sea < 3: # ์ธ์ ํ ๋ฐ๋ค๊ฐ ์ธ ์นธ ๋ฏธ๋ง์ด๋ฉด
future_map[x][y] = "X" # ๋
์ผ๋ก ๋ฐ๊พธ๊ธฐ
# ๋
์์ญ์ ์ต์, ์ต๋ ํ๊ณผ ์ด ์ฐพ๊ธฐ
min_row, max_row = R, 0
min_col, max_col = C, 0
for x in range(R):
for y in range(C):
if future_map[x][y] == "X":
min_row = min(min_row, x)
max_row = max(max_row, x)
min_col = min(min_col, y)
max_col = max(max_col, y)
# ์ต์, ์ต๋ ๋ฒ์์ ๋ง๊ฒ ์ถ๋ ฅ
for x in range(min_row, max_row + 1):
print("".join(future_map[x][min_col:max_col + 1]))
๐ฉ๐ป ํ๊ณ
๋ฏธ๋ ์ง๋๋ฅผ ๋ง๋๋ ๊ฒ๊น์ง ๋ฌธ์ ์์๋๋ฐ ์์ ์ง์ฌ๊ฐํ์ผ๋ก ์๋ฅผ ๋๊ฐ ๋ฌธ์ ์๋ค. ํ ์ด์ ์ต๋ ์ต์๋ฅผ ๊ตฌํ๋ฉด ๋๊ฒ ๋ค ์๊ฐ๊น์ง ํ๋๋ฐ ๊ทธ ์ด์ ๊ฐ์ง ๋ชปํ๋ค. ์ฒ์์ ๋ฏธ๋ ์ง๋์์ ์ฃผ๋ณ ํ์์ ๋ค์ ํ๋ฉด์ ์ธ์ ํ ๊ณณ์ "X"๊ฐ ์์ผ๋ฉด ์ฃผ๋ณ๊ณผ ๊ฐ์ด ์ถ๋ ฅํ๋ ค๊ณ ํ์๋๋ฐ, ๊ทธ๋ ๊ฒ ๊ฐ๋ฉด ์ง์ ๋ถํ ํ์ด๊ฐ ๋์ฌ๊น๋ด ํฌ๊ธฐํ๋ค. ๋ค์์ ๋ค์ ํ๋ ์ด๋ ต์ง ์๊ฒ ํ ์ ์๊ธฐ๋ฅผ!
'๐งฉ Algorithm > [BOJ] Silver' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [BOJ] 2667. ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ (Python/DFS/Silver 1) (0) | 2026.04.03 |
|---|---|
| [BOJ] 1303. ์ ์ - ์ ํฌ (Python/๊ทธ๋ํํ์/Silver 1) (0) | 2024.11.16 |
| [BOJ] 5635. ์์ผ (Python/๊ตฌํ/Silver 5) (0) | 2024.11.06 |
| [BOJ] 2563. ์์ข ์ด (Python/๊ตฌํ/Silver 5) (0) | 2024.11.04 |
| [BOJ] 2002. ์ถ์ (Python/๊ตฌํ/Silver 2) (1) | 2024.10.29 |