๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โญ Problem_Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 20165 ์ธ๋‚ด์˜ ๋„๋ฏธ๋…ธ ์žฅ์ธ ํ˜ธ์„ (Python/ํŒŒ์ด์ฌ)

by ํฌ์ŠคํŠธ์‰์ดํฌ 2023. 5. 14.

<๋ฌธ์ œ ๋งํฌ>

https://www.acmicpc.net/problem/20165

 

20165๋ฒˆ: ์ธ๋‚ด์˜ ๋„๋ฏธ๋…ธ ์žฅ์ธ ํ˜ธ์„

์‚ฌ๋žŒ์„ ํ™”๋‚˜๊ฒŒ ํ•˜๋Š” ๋ฒ•์€ ๋‹ค์–‘ํ•˜๋‹ค. ๊ทธ ์ค‘์—์„œ๋„ ์•…์งˆ์€ ๋ฐ”๋กœ ์—ด์‹ฌํžˆ ์„ธ์›Œ๋†“์€ ๋„๋ฏธ๋…ธ๋ฅผ ๋„˜์–ด๋œจ๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ฒˆ์— ์ถœ์‹œ๋œ ๋ณด๋“œ ๊ฒŒ์ž„์ธ "๋„ˆ ์ฃฝ๊ณ  ๋‚˜ ์‚ด์ž ๊ฒŒ์ž„"์€ ๋ฐ”๋กœ ์ด ์ ์„ ์ด์šฉํ•ด์„œ 2๋ช…์ด

www.acmicpc.net

 

<ํ’€์ด ์ „๋žต>

1. ๋ฌด๋‚œํ•œ ๊ตฌํ˜„ ๋ฌธ์ œ๋กœ ์ˆ˜๋น„์™€ ๊ณต๊ฒฉ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

2. ๊ณต๊ฒฉ ํ•จ์ˆ˜๋Š” ์žฌ๊ท€์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜์˜€์œผ๋ฉฐ ์ด๋ฏธ ๋„˜์–ด์ง„ ๋ธ”๋Ÿญ๊ณผ ๋ฒ”์œ„๋ฅผ ์ž˜ ํ™•์ธํ•ด์„œ ๊ตฌํ˜„ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

<์ •๋‹ต ์ฝ”๋“œ>

import sys, os, io, atexit

input = lambda: sys.stdin.readline().rstrip('\r\n')
stdout = io.BytesIO()
sys.stdout.write = lambda s: stdout.write(s.encode("ascii"))
atexit.register(lambda: os.write(1, stdout.getvalue()))

# 230514 20165 ์ธ๋‚ด์˜ ๋„๋ฏธ๋…ธ ์žฅ์ธ ํ˜ธ์„

# ์ •๋‹ต์ฝ”๋“œ

N, M, R = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(N)]


ans = 0
board = [["S" for _ in range(M)] for _ in range(N)]
dir = {
    "E": (0, 1),
    "W": (0, -1),
    "S": (1, 0),
    "N": (-1, 0)
}


# ์ˆ˜๋น„
def defense(X:int, Y:int) -> None:

    board[X][Y] = "S"

    return


# ๊ณต๊ฒฉ: ์ฃผ์–ด์ง„ ๋ฐฉํ–ฅ์œผ๋กœ์˜ ๋ธ”๋Ÿญ๋“ค์„ ์žฌ๊ท€์ ์œผ๋กœ ๋„˜์–ด๋œจ๋ฆฌ๋Š” ํ•จ์ˆ˜
def attack(X:int, Y:int, D:str) -> None:
    global ans

    # ์ด๋ฏธ ๋„˜์–ด์ง„ ๋ธ”๋Ÿญ
    if board[X][Y] == "F":
        return
    
    # ๋„˜์–ด๋œจ๋ฆฌ๊ธฐ
    board[X][Y] = "F"
    ans += 1

    # ์ฃผ์–ด์ง„ ๋ฐฉํ–ฅ์œผ๋กœ ๋†’์ด ๋งŒํผ์˜ ๋ธ”๋Ÿญ๋“ค ์žฌ๊ท€์ ์œผ๋กœ ๋„˜์–ด๋œจ๋ฆฐ๋‹ค 
    height = arr[X][Y]
    for i in range(1, height):
        nX = X + dir[D][0] * i
        nY = Y + dir[D][1] * i
        if 0 <= nX < N and 0 <= nY < M:
            attack(nX, nY, D)

    return
    



for r in range(R * 2):

    if r % 2:
        X, Y = map(int, input().split())
        defense(X - 1, Y - 1)

    else:
        X, Y, D = input().split()
        X = int(X)
        Y = int(Y)
        attack(X - 1, Y - 1, D)



print(ans)
for row in board:
    print(*row)

๋Œ“๊ธ€