class Solution:
def slidingPuzzle(self, board: List[List[int]]) -> int:
visit = {'123450': 0}
queue = deque(['123450'])
while queue:
cur = queue.popleft()
idx = cur.index('0')
if idx % 3 != 2:
s = list(cur)
s[idx], s[idx+1] = s[idx+1], s[idx]
nxt = ''.join(s)
if nxt not in visit:
queue.append(nxt)
visit[nxt] = visit[cur] + 1
if idx % 3 != 0:
s = list(cur)
s[idx], s[idx-1] = s[idx-1], s[idx]
nxt = ''.join(s)
if nxt not in visit:
queue.append(nxt)
visit[nxt] = visit[cur] + 1
if idx >= 3 :
s = list(cur)
s[idx], s[idx-3] = s[idx-3], s[idx]
nxt = ''.join(s)
if nxt not in visit:
queue.append(nxt)
visit[nxt] = visit[cur] + 1
if idx < 3 != 0:
s = list(cur)
s[idx], s[idx+3] = s[idx+3], s[idx]
nxt = ''.join(s)
if nxt not in visit:
queue.append(nxt)
visit[nxt] = visit[cur] + 1
goal = ''.join([str(x) for x in (board[0] + board[1])])
return visit[goal] if goal in visit else -1
생각해보니 얘도 BFS 문제였다. 그냥 현재 상태를 어떻게 관리하느냐만 구현하면..
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.