๐Ÿงฉ Algorithm/[BOJ] Silver

[BOJ] 5212. ์ง€๊ตฌ ์˜จ๋‚œํ™” (Python/๊ตฌํ˜„/Silver 2)

devCloud 2024. 11. 7. 20:25
728x90

[๋ฌธ์ œ ๋งํฌ] ๐Ÿ‘‰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๏ธโƒฃ ๋ฏธ๋ž˜ ์ง€๋„์—์„œ ๋•…์˜ ์˜์—ญ ์ฐพ๊ธฐ

future_map

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"๊ฐ€ ์žˆ์œผ๋ฉด ์ฃผ๋ณ€๊ณผ ๊ฐ™์ด ์ถœ๋ ฅํ•˜๋ ค๊ณ  ํ–ˆ์—ˆ๋Š”๋ฐ, ๊ทธ๋ ‡๊ฒŒ ๊ฐ€๋ฉด ์ง€์ €๋ถ„ํ•œ ํ’€์ด๊ฐ€ ๋‚˜์˜ฌ๊นŒ๋ด ํฌ๊ธฐํ–ˆ๋‹ค. ๋‹ค์Œ์— ๋‹ค์‹œ ํ’€๋• ์–ด๋ ต์ง€ ์•Š๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ!


 

728x90