https://www.acmicpc.net/problem/3190
3190๋ฒ: ๋ฑ
'Dummy' ๋ผ๋ ๋์ค๊ฒ์์ด ์๋ค. ์ด ๊ฒ์์๋ ๋ฑ์ด ๋์์ ๊ธฐ์ด๋ค๋๋๋ฐ, ์ฌ๊ณผ๋ฅผ ๋จน์ผ๋ฉด ๋ฑ ๊ธธ์ด๊ฐ ๋์ด๋๋ค. ๋ฑ์ด ์ด๋ฆฌ์ ๋ฆฌ ๊ธฐ์ด๋ค๋๋ค๊ฐ ๋ฒฝ ๋๋ ์๊ธฐ์์ ์ ๋ชธ๊ณผ ๋ถ๋ชํ๋ฉด ๊ฒ์์ด ๋๋๋ค. ๊ฒ์
www.acmicpc.net
๋จ์ ๊ตฌํ ๋ฌธ์ ์ง๋ง ์๊ฐ์ด ์์ฃผ ์ค๋ ๊ฑธ๋ ธ๋ค.๐ฅฒ
์ด ๋ฌธ์ ํ ๋ ์กฐ์ฌํ ์ ์,
์ด๋ ๋จผ์ , ๋ฐฉํฅ ์ ํ ๋์ค์ด๋ผ๋ ์ ์ด๋ค!!
๋๋ ์ฒ์์ ๋ฐฉํฅ ์ ํ ๋จผ์ ํ๊ณ ์ด๋์ ๋์ค์ ํด์ ์ค๋ต ํ์ ์ ๋ฐ์์๋ค.
์ ์ถ ์ฝ๋
๋น ์๋ฆฌ๋ 0, ์ฌ๊ณผ๋ 1, ๋ฑ์ ๋ชธํต์ 2๋ก ํ์ํ์๋ค.
๋ฑ์ ๋ชธํต ์ขํ๋ฅผ ์ฐจ๋ก๋๋ก ํ์ ๋ด์ ๊ผฌ๋ฆฌ๋ฅผ ์ค์ผ ๊ฒฝ์ฐ ๊บผ๋ด์ ์ฌ์ฉํ์๋ค.
import sys
from collections import deque
input = sys.stdin.readline
# n * n ๋ฐฐ์ด์ ๋ชจ๋ 0์ผ๋ก ์ด๊ธฐํ
n = int(input())
board = [[0]*n for _ in range(n)]
# ์ฌ๊ณผ๊ฐ ์๋ ์๋ฆฌ๋ ๋ชจ๋ 1๋ก ํ์
k = int(input())
for k in range(k):
x, y = map(int,input().split())
board[x-1][y-1] = 1
# ๋ฐฉํฅ ๋ณ๊ฒฝ ์ ๋ณด๋ฅผ ์
๋ ฅ๋ฐ์ ์ ์ฅ
direction = deque()
l = int(input())
for i in range(l):
t, d = input().split()
direction.append((t,d))
# ๋ค์ ๋ณ๊ฒฝ ์๊ฐ๊ณผ, ๋ณ๊ฒฝ ๋ฐฉํฅ
change_t, change_d = direction.popleft()
# ์, ์ผ, ์๋, ์ค
dx = [-1,0,1,0]
dy = [0,-1,0,1]
# ๊ฒฝ๊ณผ์๊ฐ์ 0, ํ์ฌ๋ฐฉํฅ์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๊ธฐํ
time = 0
direct = 3
# ๋ฑ์ ๋ชธ์ด ์ง๋๊ฐ ์ขํ๋ฅผ ์ฐจ๋ก๋๋ก ์ ์ฅ
# ๊ผฌ๋ฆฌ ๊ธธ์ด๋ฅผ ์ค์ฌ์ผํ ๋ ์ฌ์ฉํ๊ธฐ ์ํจ
snake = deque()
snake.append((0,0))
x, y = 0, 0
while True:
# ๊ฒฝ๊ณผ์๊ฐ์ ์ฆ๊ฐ์์ผ์ค๋ค.
time += 1
# ๋ฑ์ด ๋ฐ๋ผ๋ณด๊ณ ์๋ ์ขํ๋ก ์ด๋
nx, ny = x + dx[direct], y + dy[direct]
# ๋ฆฌ์คํธ ๋ฒ์ ๋ฒ์ด๋๋์ง ์ฒดํฌ
if 0<=nx<n and 0<=ny<n:
# ์ฌ๊ณผ๊ฐ ์์ผ๋ฉด, ๊ผฌ๋ฆฌ๋ฅผ ์ค์ด์ง ์๊ณ ์ด๋ํ๋ค.
if board[nx][ny] == 1:
board[nx][ny] = 2
snake.append((nx,ny))
x, y = nx, ny
# ์๋ฌด๊ฒ๋ ์์ผ๋ฉด, ๊ผฌ๋ฆฌ๋ฅผ ์ค์ด๊ณ ์ด๋ํ๋ค.
elif board[nx][ny] == 0:
tx, ty = snake.popleft()
board[tx][ty] = 0 # ๊ผฌ๋ฆฌ๊ฐ ์๋ ์๋ฆฌ๋ฅผ 0์ผ๋ก
board[nx][ny] = 2
snake.append((nx,ny))
x, y = nx, ny
# ์ด๋ํ๋ ค๋ ์๋ฆฌ์ ์์ ์ ๋ชธ์ด ์์ผ๋ฉด ์ข
๋ฃํ๋ค
elif board[nx][ny] > 1:
break
# ์ด๋ํ๋ ค๊ณ ํ๋ ์ขํ๊ฐ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด ์ข
๋ฃํ๋ค.
else:
break
# ๋ฐฉํฅ์ ๋ณ๊ฒฝํด์ผ ํ๋ค๋ฉด, ๋ณ๊ฒฝํ๋ค.
if time == int(change_t):
if change_d == 'D':
if direct > 0:
direct -= 1
else:
direct = 3
elif change_d == 'L':
if direct < 3:
direct += 1
else:
direct =0
if len(direction) > 0:
change_t, change_d = direction.popleft()
else:
change_t = 0
# ๊ฒฐ๊ณผ ์ถ๋ ฅ
print(time)
๋ณด์ํ ์
๋ฐฉํฅ ๋ณ๊ฒฝ ๋ถ๋ถ์์ ๋ฌด์ง์ฑ if-else๋ฌธ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค
์๋์ฒ๋ผ ํ๋ ๊ฒ ๋ ๋ณด๊ธฐ ์ข๊ณ ๊น๋ํ๋ฏํ๋ค.
if time == int(change_t):
if change_d == 'D':
direct = (direct - 1) % 4
elif change_d == 'L':
direct = (direct + 1) % 4
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด > ๊ตฌํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค]1475๋ฒ: ๋ฐฉ ๋ฒํธ (0) | 2023.04.24 |
---|---|
[๋ฐฑ์ค] 1316๋ฒ: ๊ทธ๋ฃน ๋จ์ด ์ฒด์ปค (0) | 2023.04.19 |
[ํ๋ก๊ทธ๋๋จธ์ค] k๋ฒ์งธ์ (0) | 2023.04.06 |
[ํ๋ก๊ทธ๋๋จธ์ค] 3์ง๋ฒ ๋ค์ง๊ธฐ (0) | 2023.04.03 |
[๋ฐฑ์ค]18406๋ฒ: ๋ญํค ์คํธ๋ ์ดํธ (0) | 2023.03.25 |