๐๋ฌธ์
https://www.acmicpc.net/problem/16985
๐์ด๋ค ์๊ณ ๋ฆฌ์ฆ?
1.์
๋ ฅ๋ฐ๊ธฐ
2. ์ธต ๋ณ๋ก permuation(์์ด) ์ฐพ๊ธฐ
3. ํ์ -> 90๋์ฉ ๋ฐ๋ณต
4. ํ์ -> bfs
5. ์ต์ ํ์ -> bfs๋๋ฆฐ ๊ฒฐ๊ณผ ๋์ฌ ๋ ๋ง๋ค ์์์ ์
๋ฐ์ดํธ
# ๋ค ํ๊ณ ์ ์ถํ๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ ์ ๋นํฉํ๋ค. ๋ฐ์ ์ฝ๋์ # ์๊ฐ ๋จ์ถ ์ด๋ผ๊ณ ์ฃผ์์ ๋ฌ์๋์ ์ฝ๋๋ ์๊ฐ์ด๊ณผ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ฝ๋์ด๋ค.
๐ป์ฝ๋
# 16985 Maaaaaaaaaze
'''
1.์
๋ ฅ๋ฐ๊ธฐ
2. ์ธต ๋ณ๋ก permuation(์์ด) ์ฐพ๊ธฐ
3. ํ์ -> 90๋์ฉ ๋ฐ๋ณต
4. ํ์ -> bfs
5. ์ต์ ํ์ -> bfs๋๋ฆฐ ๊ฒฐ๊ณผ ๋์ฌ ๋ ๋ง๋ค ์์์ ์
๋ฐ์ดํธ
'''
from itertools import permutations
from collections import deque
from copy import deepcopy
def Search():
global cnt
for _ in range(4):
for _ in range(4):
for _ in range(4):
for _ in range(4):
for _ in range(4):
Rotation(4) # 90๋ ํ์
cnt = min(cnt,Bfs(temp_graph)) # bfs๋ก ํ์ฌ ๊ทธ๋ํ์์์ ์ต์ ํ์ ํ์
if cnt == 12: # ์๊ฐ ๋จ์ถ
return
Rotation(3)
Rotation(2)
Rotation(1)
Rotation(0)
return
def Maaaaaaaaaze():
for c in permutations(range(5)):
for i in range(5):
temp_graph[i] = graph[c[i]] # ๊ฒฝ์ฐ์ ์
Search() # cnt return
# ๊ทธ๋ํ 90๋ ํ์
def Rotation(n):
temp = [[0 for j in range(5)] for i in range(5)]
for i in range(5):
for j in range(5):
temp[i][j] = temp_graph[n][4-j][i]
temp_graph[n] = temp
return
# bfs๋ก ์ต์ ํ์ ํ์
def Bfs(graph):
if graph[0][0][0] == 0 or graph[4][4][4] == 0: # ์์์ด๋ ๋์ด ๋งํ์์ผ๋ฉด ํ์ถ ๋ถ๊ฐ
return 126
deq = deque()
deq.append([0,0,0])
visit = [[[-1,-1,-1,-1,-1] for j in range(5)] for i in range(5)]
visit[0][0][0] = 0 # ์์์
dx = [0,0,1,-1,0,0]
dy = [1,-1,0,0,0,0]
dz = [0,0,0,0,1,-1]
while deq:
z,x,y = deq.popleft()
if z == 4 and x == 4 and y == 4: #์ถ๊ตฌ ๋์ฐฉ
return visit[z][x][y]
if visit[z][x][y] > cnt: # ์๊ฐ ๋จ์ถ(ํ์ฌ ํ์์ค์ธ๊ฒ ํ์ฌcnt๊ฐ ๋ณด๋ค ๋์์ง๋ฉด ์ค๋จ)
return visit[z][x][y]
for i in range(6):
nx = x + dx[i]
ny = y + dy[i]
nz = z + dz[i]
if nx < 0 or nx > 4 or ny < 0 or ny > 4 or nz < 0 or nz > 4:
continue
if graph[nz][nx][ny] == 1 and visit[nz][nx][ny] == -1:
visit[nz][nx][ny] = visit[z][x][y] + 1
deq.append([nz,nx,ny])
# ์ถ๊ตฌ ๋๋ฌ ๋ชปํ๋ฉด
return 126
# 1. ์
๋ ฅ ๋ฐ๊ธฐ
graph = [[list(map(int,input().split())) for j in range(5)]for i in range(5)]
temp_graph = [[[0,0,0,0,0]for j in range(5)]for i in range(5)]
cnt = 126
Maaaaaaaaaze()
if cnt == 126:
print(-1)
else:
print(cnt)
๐์ฝ๋ ์ค๋ช
์ฃผ์์ผ๋ก ๋์ฒด ํฉ๋๋ค.
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2638 ์น์ฆ(ํ์ด์ฌ/python) (0) | 2023.08.18 |
---|---|
[๋ฐฑ์ค] 14940 ์ฌ์ด ์ต๋จ๊ฑฐ๋ฆฌ(ํ์ด์ฌ/python) (0) | 2023.08.17 |
[๋ฐฑ์ค] 14940 ์ฌ์ด ์ต๋จ๊ฑฐ๋ฆฌ(ํ์ด์ฌ/python) (0) | 2023.08.15 |
[๋ฐฑ์ค] 2194 ์ ๋ ์ด๋์ํค๊ธฐ (ํ์ด์ฌ/python) bfs (0) | 2023.08.14 |
[๋ฐฑ์ค] 1463 1๋ก ๋ง๋ค๊ธฐ (ํ์ด์ฌ/python) dp, bfs (0) | 2023.08.03 |