<๋ฌธ์ ๋งํฌ>
https://www.acmicpc.net/problem/3190
3190๋ฒ: ๋ฑ
'Dummy' ๋ผ๋ ๋์ค๊ฒ์์ด ์๋ค. ์ด ๊ฒ์์๋ ๋ฑ์ด ๋์์ ๊ธฐ์ด๋ค๋๋๋ฐ, ์ฌ๊ณผ๋ฅผ ๋จน์ผ๋ฉด ๋ฑ ๊ธธ์ด๊ฐ ๋์ด๋๋ค. ๋ฑ์ด ์ด๋ฆฌ์ ๋ฆฌ ๊ธฐ์ด๋ค๋๋ค๊ฐ ๋ฒฝ ๋๋ ์๊ธฐ์์ ์ ๋ชธ๊ณผ ๋ถ๋ชํ๋ฉด ๊ฒ์์ด ๋๋๋ค. ๊ฒ์
www.acmicpc.net
<ํ์ด ์ ๋ต>
- ํ์ ์ ์ ์ ์ถ ๊ตฌ์กฐ๋ฅผ ํ์ฉํ ๊ตฌํ ๋ฌธ์ ์ด๋ค.
- ๊ตฌํํด์ผํ ์ฌํญ๋ค์ ๊ฐ๋ตํ๊ฒ ๋๋ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ฑ์ ์ด๋
- ๊ฒ์ ์ข
๋ฃ ์กฐ๊ฑด
- ๋ฒฝ์ ๋ถ๋ชํ์ ๋(= ๋ฒ์๋ฅผ ๋ฒ์ด๋ฌ์ ๋)
- ๋ฑ์ ๋ชธํต์ ๋ถ๋ชํ์ ๋
- ์ฌ๊ณผ๊ฐ ์์ ๋ ๋ฑ์ ํฌ๊ธฐ๋ฅผ ์ฌ๊ณผ๊ฐ ์๋ ์์ญ ํ ์นธ๋งํผ ๋๋ ค์ค๋ค.
- ์ฌ๊ณผ๊ฐ ์์ ๋ ๋ฑ์ ํฌ๊ธฐ๋ฅผ ์ ์งํ ์ฑ ์ฌ๊ณผ๊ฐ ์๋ ์์ญ์ผ๋ก ํ ์นธ ์ด๋ ์์ผ์ค๋ค.(๊ผฌ๋ฆฌ -1)
- ๋ฑ์ ๋ชธํต์ ๋ฑ์ด ์ด๋ํ๋ ๊ฒฝ๋ก๋ฅผ ํ์ํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๊ณ
- ๋ฑ์ ์ด๋์ ํ๋ฅผ ์ด์ฉํด์ ๋จธ๋ฆฌ์นธ์ ํ ์นธ์ฉ ํ์ append ํด์ฃผ๊ณ , ์ฌ๊ณผ๊ฐ ์์ผ๋ฉด popleft๋ก ๊ผฌ๋ฆฌ๊ฐ ์๋ ์์ญ์ ๋ค์ 0์ผ๋ก ๋๋ ค์ฃผ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ค.
- ๊ทธ ์ธ ์ฃผ์ํ ์ฌํญ์ผ๋ก๋
- ๋ฑ์ด ์ด๋์ ๋ง์น๊ณ ๋ฐฉํฅ ์ ํ์ ํ๋ค๋ ์
- ๋ฌธ์ ์์ ์ธ๋ฑ์ค๋ 1๋ถํฐ ์์ํ๋ค๋ ์
<์ ๋ต ์ฝ๋>
# 220830 3190 ๋ฑ
# ์ ๋ต์ฝ๋
from collections import deque
import sys
input = sys.stdin.readline
# N: ๋ฐฐ์ด์ ํฌ๊ธฐ, board: ๋ฑ์ด ์ด๋ํ๋ ๋ฐฐ์ด
N = int(input())
board = [[0 for _ in range(N)] for _ in range(N)]
# K: ์ฌ๊ณผ์ ๊ฐ์
# ์ฌ๊ณผ์ ์์น๋ฅผ ๋ฐฐ์ด์ ํ์(๋ฌธ์ ์์ 1-index์ด๊ธฐ ๋๋ฌธ์ -1)
K = int(input())
for _ in range(K):
r, c = map(int, input().split())
board[r- 1][c- 1] = 2
# L: ๋ฐฉํฅ์ ํ ํ์, turn: ๋ฐฉํฅ์ ํ ์ ๋ณด๋ฅผ ๋ด์ ๋์
๋๋ฆฌ
L = int(input())
turn = dict()
for _ in range(L):
cnt, direction = input().split()
turn[int(cnt)] = direction
# ํ์ ๋ฐฉํฅ (์ฒ์์ ์ค๋ฅธ์ชฝ์ ํฅํ๊ณ ์์ผ๋ฏ๋ก ์ค๋ฅธ์ชฝ์ ๋ฐ๋ผ๋ดค์ ๋ ๊ธฐ์ค์ผ๋ก ์๊ณ๋ฐฉํฅ)
dr = [0, 1, 0, -1]
dc = [1, 0, -1, 0]
# snake: ๋ฑ ์ด๋ ํจ์
def snake(r, c):
# cnt: ์ด๋ ํ์, d: ํ์ ๋ฐฉํฅ ์กฐ์ ๋ณ์, snake_q: ๋ฑ์ ์์น๋ฅผ ๋ํ๋ผ ํ
cnt = 0
d = 0
snake_q = deque()
# ์ฒ์ ๋ฑ์ ์ถ๋ฐ์ ํ์
board[r][c] = 1
snake_q.append((r, c))
while True:
# ์ด๋ ํ์๋ฅผ ์ธ์ฃผ๊ณ ํ์ ๋ฐฉํฅ๋๋ก ์ด๋
cnt += 1
nr = r + dr[d]
nc = c + dc[d]
# ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด ๊ฒ์ ์ข
๋ฃ
if not 0 <= nr < N or not 0 <= nc < N:
break
# ์ด๋ ์์น์ ์ฌ๊ณผ๊ฐ ์์ ๋
if board[nr][nc] == 2:
# ์ด๋ ์์น๋ฅผ ํ์ํด์ฃผ๊ณ ๋ฑ์ ์์น๋ฅผ ํ์ ๋ฃ์ด์ค๋ค.
board[nr][nc] = 1
r, c = nr, nc
snake_q.append((r, c))
# ์ด๋ ์์น์ ์ฌ๊ณผ๊ฐ ์์ ๋
elif board[nr][nc] == 0:
# ์ด๋ ์์น๋ฅผ ํ์ํด์ฃผ๊ณ ๋ฑ์ ์์น๋ฅผ ํ์ ๋ฃ์ด์ค๋ค.
board[nr][nc] = 1
r, c = nr, nc
snake_q.append((r, c))
# ๋ฑ์ ๊ผฌ๋ฆฌ๋ฅผ ์์ ์ค๋ค.
r_tail, c_tail = snake_q.popleft()
board[r_tail][c_tail] = 0
# ๋ฑ์ ๋ชธํต์ ๋ถ๋ชํ์ ๋ ๊ฒ์ ์ข
๋ฃ
else:
break
# ์ด๋์ ๋ง์น ๋ค ํด๋น ์ํ์์ ๋ฐฉํฅ ์ ํ์ ํด์ผํ ๋
if cnt in turn:
# ์ขํ์
if turn[cnt] == 'L':
d = (d - 1) % 4
# ์ฐํ์
else:
d = (d + 1) % 4
# ์ด๋ ํ์๋ฅผ ์ถ๋ ฅํ๊ณ ํจ์ ์ข
๋ฃ
print(cnt)
return
# ์ถ๋ฐ์ ์์๋ถํฐ ๋ฑ ์ด๋
snake(0, 0)
'โญ Problem_Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2146 ๋ค๋ฆฌ ๋ง๋ค๊ธฐ (Python/ํ์ด์ฌ) (0) | 2022.10.01 |
---|---|
[๋ฐฑ์ค] 20055 ์ปจ๋ฒ ์ด์ด ๋ฒจํธ ์์ ๋ก๋ด (Python/ํ์ด์ฌ) (1) | 2022.09.30 |
[๋ฐฑ์ค] 2212 ์ผ์ (Python/ํ์ด์ฌ) (2) | 2022.09.29 |
[๋ฐฑ์ค] 2206 ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ (Python/ํ์ด์ฌ) (1) | 2022.09.27 |
[๋ฐฑ์ค] 14503 ๋ก๋ด์ฒญ์๊ธฐ(Python/ํ์ด์ฌ) (0) | 2022.09.26 |
๋๊ธ