<๋ฌธ์ ๋งํฌ>
https://www.acmicpc.net/problem/20165
<ํ์ด ์ ๋ต>
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)
'โญ Problem_Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1799 ๋น์ (Python/ํ์ด์ฌ) (1) | 2023.06.05 |
---|---|
[๋ฐฑ์ค] 1421 ๋๋ฌด๊พผ ์ด๋ค์ (Python/ํ์ด์ฌ) (2) | 2023.05.08 |
[๋ฐฑ์ค] 27942 :danceplant: (Python/ํ์ด์ฌ) (1) | 2023.04.12 |
[๋ฐฑ์ค] 17070 ํ์ดํ ์ฎ๊ธฐ๊ธฐ1 (Python/ํ์ด์ฌ) (0) | 2023.04.04 |
[๋ฐฑ์ค] 2072 ์ค๋ชฉ (Python/ํ์ด์ฌ) (1) | 2022.12.28 |
๋๊ธ