โ๋ฌธ์
https://www.acmicpc.net/problem/23288

๋ฉ๋ชจ๋ฆฌ: 114372 KB, ์๊ฐ: 184 ms
๊ตฌํ, ๊ทธ๋ํ ์ด๋ก , ๊ทธ๋ํ ํ์, ์๋ฎฌ๋ ์ด์ , ๋๋น ์ฐ์ ํ์
ํฌ๊ธฐ๊ฐ N×M์ธ ์ง๋๊ฐ ์กด์ฌํ๋ค. ์ง๋์ ์ค๋ฅธ์ชฝ์ ๋์ชฝ, ์์ชฝ์ ๋ถ์ชฝ์ด๋ค. ์ง๋์ ์ขํ๋ (r, c)๋ก ๋ํ๋ด๋ฉฐ, r๋ ๋ถ์ชฝ์ผ๋ก๋ถํฐ ๋จ์ด์ง ์นธ์ ๊ฐ์, c๋ ์์ชฝ์ผ๋ก๋ถํฐ ๋จ์ด์ง ์นธ์ ๊ฐ์์ด๋ค. ๊ฐ์ฅ ์ผ์ชฝ ์์ ์๋ ์นธ์ ์ขํ๋ (1, 1)์ด๊ณ , ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋์ ์๋ ์นธ์ ์ขํ๋ (N, M)์ด๋ค. ์ด ์ง๋์ ์์ ์ฃผ์ฌ์๊ฐ ํ๋ ๋์ฌ์ ธ ์์ผ๋ฉฐ, ์ฃผ์ฌ์์ ๊ฐ ๋ฉด์๋ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 6๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์๊ฐ ํ๋์ฉ ์๋ค. ์ฃผ์ฌ์ ํ ๋ฉด์ ํฌ๊ธฐ์ ์ง๋ ํ ์นธ์ ํฌ๊ธฐ๋ ๊ฐ๊ณ , ์ฃผ์ฌ์์ ์ ๊ฐ๋๋ ์๋์ ๊ฐ๋ค.
2
4 1 3
5
6
์ฃผ์ฌ์๋ ์ง๋ ์์ ์ ๋ฉด์ด 1์ด๊ณ , ๋์ชฝ์ ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ด 3์ธ ์ํ๋ก ๋์ฌ์ ธ ์์ผ๋ฉฐ, ๋์ฌ์ ธ ์๋ ๊ณณ์ ์ขํ๋ (1, 1) ์ด๋ค. ์ง๋์ ๊ฐ ์นธ์๋ ์ ์๊ฐ ํ๋์ฉ ์๋ค. ๊ฐ์ฅ ์ฒ์์ ์ฃผ์ฌ์์ ์ด๋ ๋ฐฉํฅ์ ๋์ชฝ์ด๋ค. ์ฃผ์ฌ์์ ์ด๋ ํ ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
- ์ฃผ์ฌ์๊ฐ ์ด๋ ๋ฐฉํฅ์ผ๋ก ํ ์นธ ๊ตด๋ฌ๊ฐ๋ค. ๋ง์ฝ, ์ด๋ ๋ฐฉํฅ์ ์นธ์ด ์๋ค๋ฉด, ์ด๋ ๋ฐฉํฅ์ ๋ฐ๋๋ก ํ ๋ค์ ํ ์นธ ๊ตด๋ฌ๊ฐ๋ค.
- ์ฃผ์ฌ์๊ฐ ๋์ฐฉํ ์นธ (x, y)์ ๋ํ ์ ์๋ฅผ ํ๋ํ๋ค.
- ์ฃผ์ฌ์์ ์๋ซ๋ฉด์ ์๋ ์ ์ A์ ์ฃผ์ฌ์๊ฐ ์๋ ์นธ (x, y)์ ์๋ ์ ์ B๋ฅผ ๋น๊ตํด ์ด๋ ๋ฐฉํฅ์ ๊ฒฐ์ ํ๋ค.
- A > B์ธ ๊ฒฝ์ฐ ์ด๋ ๋ฐฉํฅ์ 90๋ ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ์ํจ๋ค.
- A < B์ธ ๊ฒฝ์ฐ ์ด๋ ๋ฐฉํฅ์ 90๋ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ์ํจ๋ค.
- A = B์ธ ๊ฒฝ์ฐ ์ด๋ ๋ฐฉํฅ์ ๋ณํ๋ ์๋ค.
์นธ (x, y)์ ๋ํ ์ ์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํ ์ ์๋ค. (x, y)์ ์๋ ์ ์๋ฅผ B๋ผ๊ณ ํ์๋, (x, y)์์ ๋์๋จ๋ถ ๋ฐฉํฅ์ผ๋ก ์ฐ์ํด์ ์ด๋ํ ์ ์๋ ์นธ์ ์ C๋ฅผ ๋ชจ๋ ๊ตฌํ๋ค. ์ด๋ ์ด๋ํ ์ ์๋ ์นธ์๋ ๋ชจ๋ ์ ์ B๊ฐ ์์ด์ผ ํ๋ค. ์ฌ๊ธฐ์ ์ ์๋ B์ C๋ฅผ ๊ณฑํ ๊ฐ์ด๋ค.
๋ณด๋์ ํฌ๊ธฐ์ ๊ฐ ์นธ์ ์๋ ์ ์, ์ฃผ์ฌ์์ ์ด๋ ํ์ K๊ฐ ์ฃผ์ด์ก์๋, ๊ฐ ์ด๋์์ ํ๋ํ๋ ์ ์์ ํฉ์ ๊ตฌํด๋ณด์.
์ด ๋ฌธ์ ์ ์์ 1๋ถํฐ 7์ ๊ฐ์ ์ง๋์์ ์ด๋ํ๋ ํ์๋ง ์ฆ๊ฐ์ํค๋ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ์์ 8์ ๊ฐ์ ์ง๋์์ ์ด๋ํ๋ ํ์๋ฅผ ๋งค์ฐ ํฌ๊ฒ ๋ง๋ค์๋ค.
โ๐ปํ์ด

๋จผ์ ๋์๋จ๋ถ์ผ๋ก ์ฃผ์ฌ์๋ฅผ ๊ตด๋ ธ์ ๋ ์ฃผ์ฌ์๊ฐ ์ด๋ป๊ฒ ๋ฐ๋๋์ง ์์์ผ ํ๋ค. ์ฃผ์ฌ์๋ฅผ ๋ฆฌ์คํธ๋ก [2, 1, 4, 3, 5, 6]์ผ๋ก ํํํด๋ณด์๋ค. ์ฃผ์ฌ์ ๋ฆฌ์คํธ ๋ช ์นญ์ dice๋ก ํ๊ฒ ๋ค.
๊ทธ๋ฌ๋ฉด ์ด ์ฃผ์ฌ์๋ฅผ ๋์ผ๋ก ์์ง์์ ๋ ์ฃผ์ฌ์๋ [2, 4, 6, 1, 5, 3]์ผ๋ก ๋ฐ๋๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ์ฌ๊ธฐ์ ๋ฐ๋ ์์น๋ง ๋ณธ๋ค๋ฉด dice[2] โก๏ธ dice[1], dice[5] โก๏ธ dice[2], dice[1] โก๏ธ dice[3], dice[3] โก๏ธ dice[5]๊ฐ ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๋จ, ์, ๋ถ๋ ํ์ธํจ์ผ๋ก์จ ์ฃผ์ฌ์๊ฐ ๊ตด๋ ์ ๋ ์ด๋ป๊ฒ ๋ฐ๋๋์ง ์ ์ ์๋ค.
๊ทธ๋ผ ์ด์ ์ฃผ์ฌ์๋ฅผ ๊ตด๋ฆฌ๋ฉด์ ์ฃผ์ฌ์ ์๋ซ๋ฉด๊ณผ ํด๋น ์นธ์ ์๋ฅผ ๋น๊ตํ๋ฉด์ ํ์ํ๋ฉด ๋๋ค. ์ฌ๊ธฐ์ ํ์์ ๋๋น ํ์์ผ๋ก ์ด ๋ฌธ์ ๋ BFS๋ฅผ ์ด์ฉํด ํ๋ฉด ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ํ์ ํ์ฌ ์์น์ ๋ฐฉํฅ์ ๊ฐ์ด ๊ธฐ๋กํ๋ฉด์ ํ์ํ๋ฉด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ํ๋ฉด์ ์ฃผ์ฌ์ ์๋ซ๋ฉด์ ์์ ํ์ฌ ์์น์ ์๋ฅผ ๋น๊ตํด ์ฃผ์ฌ์๋ฅผ ์๊ณ, ๋ฐ์๊ณ๋ก 90๋ ๋๋ฆฌ๋ฉด ๋๋ค.
์ด๋ ์นธ์ ์๊ฐ ์ฃผ์ฌ์ ์๋ซ๋ฉด ๋ณด๋ค ์์ผ๋ฉด ์๊ณ๋ฐฉํฅ์ผ๋ก 90๋๋ฅผ ๋๋ ค ๋ โก๏ธ ๋จ โก๏ธ ์ โก๏ธ ๋ถ์ด ๋๊ณ , ์นธ์ ์๊ฐ ์ฃผ์ฌ์ ์๋ซ๋ฉด๋ณด๋ค ํฌ๋ฉด ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก 90๋๋ฅผ ๋๋ ค ๋ โก๏ธ ๋ถ โก๏ธ ์ โก๏ธ ๋จ์ด ๋๋ค. ๋์ 0, ๋จ์ 1, ์๋ฅผ 2, ๋ถ์ 3์ผ๋ก ์ฃผ๊ณ ์๊ณ ๋ฐฉํฅ์ผ ๋๋ (i+1)%4๋ก ๋ฐฉํฅ์ ๋ฐ๊พธ๊ณ , ๋ฐ์๊ณ ๋ฐฉํฅ์ผ ๋๋ (i-1)%4๋ก ๋ฐฉํฅ์ ๋ฐ๊พธ๋ฉด ๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ฐ๊พผ ๋ฐฉํฅ์ผ๋ก ๋ ์ด์ ๊ฐ ์ ์๋ค๋ฉด ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ๋์์ ๊ฐ์ผ ํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ด ๋๋ (i+2)%4๋ฅผ ํ๋ฉด 180๋๋ก ๋ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ฃผ์ฌ์๋ฅผ ์์ง์์ผ๋ฉด ์ ์๋ฅผ ๊ณ์ฐํด์ผ ํ๋ค. ์ ์๋ฅผ ๊ณ์ฐํ ๋๋ ์ง๋๊ฐ๋ ์นธ์ ๋ค์ ์ง๋๊ฐ๋ฉด ์ ๋๋ฏ๋ก ๋ฐฉ๋ฌธ์ ํ์ํด์ผ ํ๋ค. ์ ์๋ ํด๋น ์นธ์์ ๋์๋จ๋ถ์ผ๋ก ์์ง์ผ ์ ์์ผ๋ฉด์ ๊ฐ์ ์ซ์์ธ ์นธ์ ์ฐ์ํด์ ๋ช ๋ฒ ๊ฐ ์ ์๋์ง ํ์ํ ํ ๊ฐ ์ ์๋ ์นธ ๊ฐ์์ ํ์ฌ ์นธ์ ์๋ฅผ ๊ณฑํ๋ฉด ๋๋ค.
์ ๋ด์ฉ์ ์ฝ๋๋ก ํ์ดํ๋ฉด ์๋์ ๊ฐ์ด ํ ์ ์๋ค.
๐ป์ฝ๋
import sys
from collections import deque
input = sys.stdin.readline
N, M, K = map(int, input().split()) # N ์ธ๋ก ํฌ๊ธฐ, M ๊ฐ๋ก ํฌ๊ธฐ, ์ด๋ํ๋ ํ์ K
board = [list(map(int, input().split())) for _ in range(N)]
# ๋ ๋จ ์ ๋ถ
dy = [0, 1, 0, -1]
dx = [1, 0, -1, 0]
# 1 -> ์๋ฉด, 6 -> ์๋ซ๋ฉด
dice = [2, 1, 4, 3, 5, 6]
q = deque([(0, 0, 0)]) # y, x, d
k = 0
result = 0
def score(y, x):
visited = [[False for _ in range(M)] for _ in range(N)]
q = deque([(y, x)])
count = 1
visited[y][x] = True
while q:
y, x = q.popleft()
for i in range(4):
ny, nx = y + dy[i], x + dx[i]
if 0 <= ny < N and 0 <= nx < M and not visited[ny][nx] and board[ny][nx] == board[y][x]:
visited[ny][nx] = True
q.append((ny, nx))
count += 1
return count
def rotate_dice(d):
if d == 0:
dice[1], dice[2], dice[3], dice[5] = dice[2], dice[5], dice[1], dice[3]
elif d == 1:
dice[0], dice[1], dice[4], dice[5] = dice[5], dice[0], dice[1], dice[4]
elif d == 2:
dice[1], dice[2], dice[3], dice[5] = dice[3], dice[1], dice[5], dice[2]
elif d == 3:
dice[0], dice[1], dice[4], dice[5] = dice[1], dice[4], dice[5], dice[0]
while q and k < K:
y, x, d = q.popleft()
if y + dy[d] < 0 or y+dy[d] >= N or x + dx[d] < 0 or x + dx[d] >= M:
d = (d + 2) % 4
y += dy[d]
x += dx[d]
rotate_dice(d)
if board[y][x] < dice[5]:
d = (d+1) % 4
elif board[y][x] > dice[5]:
d = (d-1) % 4
result += board[y][x] * score(y, x)
q.append((y, x, d))
k += 1
print(result)
๐ํ๊ธฐ

๋ฌธ์ ๊ฐ ์ฌ์ด ๊ฑด์ง ์๋๋ฉด ๋ด๊ฐ BFS๋ ์ด์ ์๋ฌ์ด ๋ ๊ฒ์ธ์ง...
'Coding Test > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [๋ฐฑ์ค] 14890.๊ฒฝ์ฌ๋ก/Python - Gold3 (0) | 2026.03.19 |
|---|---|
| [ํ๋ก๊ทธ๋๋จธ์ค] [3์ฐจ] n์ง์ ๊ฒ์/Python - Lv.2 (0) | 2025.10.09 |
| [ํ๋ก๊ทธ๋๋จธ์ค] ํํ/Python - Lv.2 (0) | 2025.10.07 |
| [ํ๋ก๊ทธ๋๋จธ์ค] [1์ฐจ] ๋ด์ค ํด๋ฌ์คํฐ๋ง/Python - Lv.2 (0) | 2025.10.02 |
| [ํ๋ก๊ทธ๋๋จธ์ค] [1์ฐจ] ๋น๋ฐ์ง๋/Python - Lv.1 (0) | 2025.10.01 |