๐ฒ ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ
- ์๊ฐ ์ ํ: 2์ด
- ๋ฉ๋ชจ๋ฆฌ ์ ํ: 512MB
๐ ๋ฌธ์
- ํฌ๊ธฐ๊ฐ N x M์ธ ์ง๋๊ฐ ์กด์ฌํ๋ค. ์ง๋์ ์ค๋ฅธ์ชฝ์ ๋์ชฝ, ์์ชฝ์ ๋ถ์ชฝ์ด๋ค. ์ด ์ง๋์ ์์ ์ฃผ์ฌ์๊ฐ ํ๋ ๋์ฌ์ ธ ์์ผ๋ฉฐ, ์ฃผ์ฌ์์ ์ ๊ฐ๋๋ ์๋์ ๊ฐ๋ค. ์ง๋์ ์ขํ๋ (r, c)๋ก ๋ํ๋ด๋ฉฐ, r๋ ๋ถ์ชฝ์ผ๋ก๋ถํฐ ๋จ์ด์ง ์นธ์ ๊ฐ์, c๋ ์์ชฝ์ผ๋ก๋ถํฐ ๋จ์ด์ง ์นธ์ ๊ฐ์์ด๋ค.
- ์ฃผ์ฌ์๋ ์ง๋ ์์ ์ ๋ฉด์ด 1์ด๊ณ , ๋์ชฝ์ ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ด 3์ธ ์ํ๋ก ๋์ฌ์ ธ ์์ผ๋ฉฐ, ๋์ฌ์ ์๋ ๊ณณ์ ์ขํ๋(x, y)์ด๋ค.
- ๊ฐ์ฅ ์ฒ์์ ์ฃผ์ฌ์์๋ ๋ชจ๋ ๋ฉด์ 0์ด ์ ํ์ ธ ์๋ค.
- ์ง๋์ ๊ฐ ์นธ์๋ ์ ์๊ฐ ํ๋์ฉ ์ฐ์ฌ์ ธ ์๋ค. ์ฃผ์ฌ์๋ฅผ ๊ตด๋ ธ์ ๋, ์ด๋ํ ์นธ์ ์ฐ์ฌ ์๋ ์๊ฐ 0์ด๋ฉด, ์ฃผ์ฌ์์ ๋ฐ๋ฅ๋ฉด์ ์ฐ์ฌ ์๋ ์๊ฐ ์นธ์ ๋ณต์ฌ๋๋ค. 0์ด ์๋ ๊ฒฝ์ฐ์๋ ์นธ์ ์ฐ์ฌ ์๋ ์๊ฐ ์ฃผ์ฌ์์ ๋ฐ๋ฅ๋ฉด์ ๋ณต์ฌ๋๋ฉฐ, ์นธ์ ์ฐ์ฌ ์๋ ์๋ 0์ด ๋๋ค.
- ์ฃผ์ฌ์๋ ์ง๋์ ๋ฐ๊นฅ์ผ๋ก ์ด๋์ํฌ ์ ์๋ค. ๋ง์ฝ ๋ฐ๊นฅ์ผ๋ก ์ด๋์ํค๋ ค๊ณ ํ๋ ๊ฒฝ์ฐ์๋ ํด๋น ๋ช ๋ น์ ๋ฌด์ํด์ผ ํ๋ฉฐ, ์ถ๋ ฅ๋ ํ๋ฉด ์๋๋ค.
์ ๋ ฅ
- ์ฒซ์งธ ์ค์ ์ง๋์ ์ธ๋ก ํฌ๊ธฐ N, ๊ฐ๋ก ํฌ๊ธฐ M(1 <= N, M <= 20), ์ฃผ์ฌ์๋ฅผ ๋์ ๊ณณ์ ์ขํ x, y (0 <= x <= N -1, 0 <= y <= M -1), ๊ทธ๋ฆฌ๊ณ ๋ช ๋ น์ ๊ฐ์ K( 1 <= K <= 1000)๊ฐ ์ฃผ์ด์ง๋ค.
- ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ง๋์ ์ฐ์ฌ ์๋ ์๊ฐ ๋ถ์ชฝ๋ถํฐ ๋จ์ชฝ์ผ๋ก, ๊ฐ ์ค์ ์์ชฝ๋ถํฐ ๋์ชฝ ์์๋๋ก ์ฃผ์ด์ง๋ค.
- ์ฃผ์ฌ์๋ฅผ ๋์ ์นธ์ ์ฐ์ฌ ์๋ ์๋ ํญ์ 0์ด๋ค.
- ์ง๋์ ๊ฐ ์นธ์ ์ฐ์ฌ ์๋ ์๋ 10๋ฏธ๋ง์ ์์ฐ์ ๋๋ 0์ด๋ค.
- ๋ง์ง๋ง ์ค์๋ ์ด๋ํ๋ ๋ช ๋ น์ด ์์๋๋ก ์ฃผ์ด์ง๋ค. ๋์ชฝ์ 1, ์์ชฝ์ 2, ๋ถ์ชฝ์ 3, ๋จ์ชฝ์ 4๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
- ์ด๋ํ ๋๋ง๋ค ์ฃผ์ฌ์์ ์ ๋ฉด์ ์ฐ์ฌ ์๋ ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ๋ฐ๊นฅ์ผ๋ก ์ด๋์ํค๋ ค๊ณ ํ๋ ๊ฒฝ์ฐ์๋ ํด๋น ๋ช ๋ น์ ๋ฌด์ํด์ผ ํ๋ฉฐ, ์ถ๋ ฅ๋ ํ๋ฉด ์ ๋๋ค.
๐ก ๋ฌธ์ ํ์ด ์์ด๋์ด
- ๊ท์น์ ๋ง์ถฐ ๋จ์ ๊ตฌํํ๋ฉด ๋ ๊ฒ ๊ฐ์.
- ๊ท์น
- ๋จ์ชฝ์ด๋ โฌ๏ธ
- front -> down
- down -> back
- back -> up
- up -> front
- ๋ถ์ชฝ์ด๋ โฌ๏ธ
- front -> up
- up -> back
- back -> down
- down -> front
- ๋์ชฝ์ด๋ โก๏ธ
- right -> down
- down -> left
- left -> up
- up -> right
- ์์ชฝ์ด๋ โฌ
๏ธ
- left -> down
- down -> right
- right -> up
- up -> left
- ๋จ์ชฝ์ด๋ โฌ๏ธ
โ ์ ๋ต ์ฝ๋
# ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ
from sys import stdin
input = stdin.readline
N, M, x, y, k = map(int, input().split())
maps = []
for _ in range(N):
maps.append(list(map(int, input().split())))
commands = list(map(int, input().split()))
up = 0
down = 0
right = 0
front = 0
back = 0
left = 0
SOUTH, NORTH, EAST, WEST = 4, 3, 1, 2
# SOUTH => front
# NORTH => back
# EAST => left
# WEST => right
positions = (x, y)
for c in commands:
# ์ด๋ํ ์นธ์ ์ฐ์ฌ ์๋ ์๊ฐ 0์ด๋ฉด, ์ฃผ์ฌ์์ ๋ฐ๋ฅ๋ฉด์ ์ฐ์ฌ ์๋ ์๊ฐ ์นธ์ ๋ณต์ฌ๋๋ค.
# 0์ด ์๋ ๊ฒฝ์ฐ์๋ ์นธ์ ์ฐ์ฌ ์๋ ์๊ฐ ์ฃผ์ฌ์์ ๋ฐ๋ฅ๋ฉด์ผ๋ก ๋ณต์ฌ๋๋ฉฐ, ์นธ์ ์ฐ์ฌ ์๋ ์๋ 0์ด ๋๋ค.
if c == SOUTH:
nx, ny = positions[0] + 1, positions[1]
elif c == NORTH:
nx, ny = positions[0] - 1, positions[1]
elif c == WEST:
nx, ny = positions[0], positions[1] -1
else:
nx, ny = positions[0], positions[1] + 1
# ๋ฒ์ ๋์ด๊ฐ๋ฉด ์๋ฌด๊ฒ๋ ์ํจ
if 0 <= nx < N and 0 <= ny < M:
positions = (nx, ny)
else:
continue
if c == SOUTH:
tmp = front
front = up
up = back
back = down
down = tmp
elif c == NORTH:
tmp = up
up = front
front = down
down = back
back = tmp
elif c == WEST:
tmp = left
left = up
up = right
right = down
down = tmp
else:
tmp = right
right = up
up = left
left = down
down = tmp
if maps[nx][ny] == 0:
maps[nx][ny] = down
else:
down = maps[nx][ny]
maps[nx][ny] = 0
# print()
# print(' ', back)
# print(left, up, right)
# print(' ', front)
# print(' ', down)
print(up)
728x90
'Algorithm&CodingTest > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Beakjoon][2110] ๊ณจ๋4 ๊ณต์ ๊ธฐ ์ค์น - Python (1) | 2024.10.09 |
---|---|
[Baekjoon][1021] ์ค๋ฒ2 ์ ๊ธฐ๋ ๋ฐฐ์ถ - Python (0) | 2024.10.08 |
[Beakjoon][14502] ๊ณจ๋4 ์ฐ๊ตฌ์ - Python (0) | 2024.10.08 |
[Baekjoon][2206] ๊ณจ๋3 ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ - Python (0) | 2024.10.08 |
[Beakjoon][7576] ๊ณจ๋5 - ํ ๋งํ Python (0) | 2024.10.07 |