[๋ฐฑ์ค/python] 3190๋ฒ : ๋ฑ
๋ฌธ์
'Dummy' ๋ผ๋ ๋์ค๊ฒ์์ด ์๋ค. ์ด ๊ฒ์์๋ ๋ฑ์ด ๋์์ ๊ธฐ์ด๋ค๋๋๋ฐ, ์ฌ๊ณผ๋ฅผ ๋จน์ผ๋ฉด ๋ฑ ๊ธธ์ด๊ฐ ๋์ด๋๋ค. ๋ฑ์ด ์ด๋ฆฌ์ ๋ฆฌ ๊ธฐ์ด๋ค๋๋ค๊ฐ ๋ฒฝ ๋๋ ์๊ธฐ์์ ์ ๋ชธ๊ณผ ๋ถ๋ชํ๋ฉด ๊ฒ์์ด ๋๋๋ค.
๊ฒ์์ NxN ์ ์ฌ๊ฐ ๋ณด๋์์์ ์งํ๋๊ณ , ๋ช๋ช ์นธ์๋ ์ฌ๊ณผ๊ฐ ๋์ฌ์ ธ ์๋ค. ๋ณด๋์ ์ํ์ข์ฐ ๋์ ๋ฒฝ์ด ์๋ค. ๊ฒ์์ด ์์ํ ๋ ๋ฑ์ ๋งจ์ ๋งจ์ข์ธก์ ์์นํ๊ณ ๋ฑ์ ๊ธธ์ด๋ 1 ์ด๋ค. ๋ฑ์ ์ฒ์์ ์ค๋ฅธ์ชฝ์ ํฅํ๋ค.
๋ฑ์ ๋งค ์ด๋ง๋ค ์ด๋์ ํ๋๋ฐ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ๋ฐ๋ฅธ๋ค.
- ๋จผ์ ๋ฑ์ ๋ชธ๊ธธ์ด๋ฅผ ๋๋ ค ๋จธ๋ฆฌ๋ฅผ ๋ค์์นธ์ ์์น์ํจ๋ค.
- ๋ง์ฝ ์ด๋ํ ์นธ์ ์ฌ๊ณผ๊ฐ ์๋ค๋ฉด, ๊ทธ ์นธ์ ์๋ ์ฌ๊ณผ๊ฐ ์์ด์ง๊ณ ๊ผฌ๋ฆฌ๋ ์์ง์ด์ง ์๋๋ค.
- ๋ง์ฝ ์ด๋ํ ์นธ์ ์ฌ๊ณผ๊ฐ ์๋ค๋ฉด, ๋ชธ๊ธธ์ด๋ฅผ ์ค์ฌ์ ๊ผฌ๋ฆฌ๊ฐ ์์นํ ์นธ์ ๋น์์ค๋ค. ์ฆ, ๋ชธ๊ธธ์ด๋ ๋ณํ์ง ์๋๋ค.
์ฌ๊ณผ์ ์์น์ ๋ฑ์ ์ด๋๊ฒฝ๋ก๊ฐ ์ฃผ์ด์ง ๋ ์ด ๊ฒ์์ด ๋ช ์ด์ ๋๋๋์ง ๊ณ์ฐํ๋ผ.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ณด๋์ ํฌ๊ธฐ N์ด ์ฃผ์ด์ง๋ค. (2 ≤ N ≤ 100) ๋ค์ ์ค์ ์ฌ๊ณผ์ ๊ฐ์ K๊ฐ ์ฃผ์ด์ง๋ค. (0 ≤ K ≤ 100)
๋ค์ K๊ฐ์ ์ค์๋ ์ฌ๊ณผ์ ์์น๊ฐ ์ฃผ์ด์ง๋๋ฐ, ์ฒซ ๋ฒ์งธ ์ ์๋ ํ, ๋ ๋ฒ์งธ ์ ์๋ ์ด ์์น๋ฅผ ์๋ฏธํ๋ค. ์ฌ๊ณผ์ ์์น๋ ๋ชจ๋ ๋ค๋ฅด๋ฉฐ, ๋งจ ์ ๋งจ ์ข์ธก (1ํ 1์ด) ์๋ ์ฌ๊ณผ๊ฐ ์๋ค.
๋ค์ ์ค์๋ ๋ฑ์ ๋ฐฉํฅ ๋ณํ ํ์ L ์ด ์ฃผ์ด์ง๋ค. (1 ≤ L ≤ 100)
๋ค์ L๊ฐ์ ์ค์๋ ๋ฑ์ ๋ฐฉํฅ ๋ณํ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋๋ฐ, ์ ์ X์ ๋ฌธ์ C๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ. ๊ฒ์ ์์ ์๊ฐ์ผ๋ก๋ถํฐ X์ด๊ฐ ๋๋ ๋ค์ ์ผ์ชฝ(C๊ฐ 'L') ๋๋ ์ค๋ฅธ์ชฝ(C๊ฐ 'D')๋ก 90๋ ๋ฐฉํฅ์ ํ์ ์ํจ๋ค๋ ๋ป์ด๋ค. X๋ 10,000 ์ดํ์ ์์ ์ ์์ด๋ฉฐ, ๋ฐฉํฅ ์ ํ ์ ๋ณด๋ X๊ฐ ์ฆ๊ฐํ๋ ์์ผ๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ฒ์์ด ๋ช ์ด์ ๋๋๋์ง ์ถ๋ ฅํ๋ค.
์ ๋ต
from collections import deque
import sys
input = sys.stdin.readline
# ๋ณด๋ ๊ทธ๋ฆฌ๊ธฐ
N = int(input())
board = [[0 for _ in range(N)] for _ in range(N)]
# ์ฌ๊ณผ ์์น ํ์
K = int(input())
for _ in range(K):
x, y = map(int, input().split())
board[x-1][y-1] = -1
# {์๊ฐ : ๋ฐฉํฅ} ์ผ๋ก ์ ์ฅ, ๋ฐฉํฅ์ L์ 0, D๋ 1๋ก ํ์
curve = {}
LD = {'L':0, 'D':1}
L = int(input())
for _ in range(L):
x, c = input().split()
curve[int(x)] = LD[c]
# 0: ๋ถ, 1: ๋, 2: ์, 3: ๋จ / [L์ ๋ฐฉํฅ, D์ ๋ฐฉํฅ]
dir = {0:[2,1], 1:[0,3], 2:[3,0], 3:[1,2]}
xy = {0:(-1,0), 1:(0,1), 2:(0,-1), 3:(1,0)}
c = 1 # ํ์ฌ ๋์ชฝ์ ํฅํจ
time = 0
body = deque([[0,0]])
while True:
time += 1
x, y = body[-1][0] + xy[c][0], body[-1][1] + xy[c][1]
# ๋ฟ์ผ๋ฉด ๋ฉ์ถ๊ธฐ
if (x < 0 or y < 0 or x >= N or y >= N) or [x, y] in body:
print(time)
break
# ์ฌ๊ณผ ๋จน๊ธฐ
body.append([x,y])
if board[x][y] == -1:
board[x][y] = 0
else:
body.popleft()
# ๋ฐฉํฅ ๋ฐ๊พธ๊ธฐ
if time in curve:
c = dir[c][curve[time]]
N์ ์ ๋ ฅ๋ฐ์ board๋ฅผ ๊ทธ๋ฆฌ๊ณ , K์ ์ฌ๊ณผ ์์น๋ฅผ ์ ๋ ฅ๋ฐ์ ์ฌ๊ณผ ์๋ฆฌ๋ฅผ -1๋ก ํ์ํ๋ค.
์๊ฐ๊ณผ ํ์ ๋ฐฉํฅ์ ๋์ ๋๋ฆฌ ํํ๋ก curve์ ์ ์ฅํ๋๋ฐ,
์ด๋ ํ์ ๋ฐฉํฅ์ L์ 0์ผ๋ก D๋ 1๋ก ์ ์ฅํ๋ค.
๋ฐฉํฅ์ ํ์ ํ ๋ ํ์ฌ ๋ฐฉํฅ์ด ์ด๋๋์ ๋ฐ๋ผ x, y์ ๋ํ๋ ๊ฐ์ด ๋ฌ๋ผ์ง๋ค.
๋นจ๊ฐ ๊ธ์จ์ N, W, E, S๊ฐ ํ์ฌ ๋ฐฉํฅ์ผ ๋, ๋ฐ๋๋ ๋ฐฉํฅ์ ๋ฐ๋ผ ์ขํ๊ฐ์ด ์ด๋ป๊ฒ ๋ฐ๋๋์ง ์ดํดํ๊ธฐ ์ํด ๊ทธ๋ ค๋ณด์๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ์๋์ ๋ด์ฉ์ ๋ฐ๋ผ ๋ฐฉํฅ์ด ๋ฐ๋์ ์ ์ ์๋ค.
# 0: ๋ถ, 1: ๋, 2: ์, 3: ๋จ / [L์ ๋ฐฉํฅ, D์ ๋ฐฉํฅ]
dir = {0:[2,1], 1:[0,3], 2:[3,0], 3:[1,2]}
xy = {0:(-1,0), 1:(0,1), 2:(0,-1), 3:(1,0)}
c = 1 # ํ์ฌ ๋์ชฝ์ ํฅํจ
์ด์ N์ 0์ผ๋ก, E๋ 1๋ก, W๋ 2๋ก, S๋ 3์ผ๋ก ์นํํ์ฌ ๋์ ๋๋ฆฌ์ ์ ์ฅํด์ฃผ์๋ค.
dir์ { ํ์ฌ ๋ฐฉํฅ : [L ํ์ ๋ ๋ฐฉํฅ, D ํ์ ๋ ๋ฐฉํฅ] } ์ผ๋ก ์ด๋ฃจ์ด์ ธ์๊ณ
xy๋ { ํ์ฌ ๋ฐฉํฅ : [x์ ๋ํ๋ ์, y์ ๋ํ๋ ์] } ๋ก
ํ์ฌ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ ๋ ๋ค์ ์ขํ๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ ๋ปํ๋ค.
์ฒ์์๋ ์ค๋ฅธ์ชฝ์ผ๋ก ๋์๊ฐ๋ฏ๋ก ํ์ฌ ๋ฐฉํฅ์ ๋์ชฝ ์ฆ 1์ด๋ผ ํ ์ ์๋ค.
time = 0
body = deque([[0,0]])
while True:
time += 1
x, y = body[-1][0] + xy[c][0], body[-1][1] + xy[c][1]
ํ์นธ์ฉ ์ ์งํ ๋๋ง๋ค time์ด 1์ฉ ์ฆ๊ฐํ๊ณ body์๋ ํ์ฌ ์์นํ๊ณ ์๋ ์ขํ๋ฅผ deque ํํ๋ก ์ ์ฅํ๋ค.
xy[c][0]์ ํ์ฌ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ ๋ x์ ๋ํ๋ ์๋ฅผ, xy[c][1]์ ํ์ฌ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ ๋ y์ ๋ํ๋ ์๋ฅผ ์๋ฏธํ๋ค.
๋ค์ ์์น์ ์ขํ x, y๊ฐ ๋ณด๋๋ฅผ ๋ฒ์ด๋๊ฑฐ๋ ๋ชธ์ ๋ฟ์์ ๋ ๋ฉ์ถ๋ค.
๊ทธ๋ ์ง ์๋ค๋ฉด ํ์ฌ ์์น๋ฅผ body์ ์ ์ฅํ ๋ค์ ์ฌ๊ณผ๊ฐ ์๋ค๋ฉด ๋จน์ด ์์ ๊ณ
์๋ค๋ฉด ๊ธธ์ด๊ฐ ๋์ด๋์ง์๊ธฐ ๋๋ฌธ์ ๋งจ ๋ ์์น๋ฅผ popleft ํ๋ค.
๋ฐฉํฅ์ ์ ํํด์ผํ๋ค๋ฉด c์ ํ์ฌ ๋ฐฉํฅ์ผ ๋ ์ ํํ๋ฉด ์ด๋ ๋ฐฉํฅ์ด ๋๋์ง ์ ์ฅํ๋ค.
.
.
.
๋์๋จ๋ถ ์์น๋ณ๋ก ์๊ฐํ๋๋ผ ๋ญ๊ฐ ๋ณต์กํ๊ฒ ํผ ๋๋์ด๋ค.
๊ท์น์ ๋ชป์ฐพ๊ณ ๋ชจ๋ ๋ฐฉํฅ์ ๊ฒฝ์ฐ์ ์๋ฅผ ์ ์ฅํด์ ํ์๋ค.
์ด๋ ๊ฒ ํธ๋๊ฒ ๋ง๋ ์ถ์ง๋ง ์ผ๋จ ํด๊ฒฐํ์ผ๋ ํฌ์คํ ํด๋ณธ๋ค ^__^
'๐์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/python] 12865๋ฒ : ํ๋ฒํ ๋ฐฐ๋ญ (0) | 2021.08.30 |
---|---|
[๋ฐฑ์ค/python] 9465๋ฒ : ์คํฐ์ปค (0) | 2021.08.28 |
[๋ฐฑ์ค/python] 9935๋ฒ : ๋ฌธ์์ด ํญ๋ฐ (0) | 2021.08.26 |
[๋ฐฑ์ค/python] 12851๋ฒ : ์จ๋ฐ๊ผญ์ง 2 (0) | 2021.08.25 |
[๋ฐฑ์ค/python] 11724๋ฒ : ์ฐ๊ฒฐ ์์์ ๊ฐ์ (0) | 2021.08.23 |