뱀게임을 도전했는데 맘이 아팠다...
이번에도 어떻게 풀지 알았고 다 짰는데... 20%에서 틀리더라ㅠ
결론은 다른 블로그 참고해서 코드를 수정했다.
일단 사다리와 뱀을 구별할 필요는 없어보인다..
물론 둘이 다르면 당연 그런데 어짜피 현재위치key 다음위치 value의 dict형태이고 결과에 대한 변하는 방식이 같다..
난 문제를 대충 읽고 사다리나 뱀이 같은 칸에 있을수도 있다 생각했는데 없다더라... 그래서 그 처리를 while문으로 만들었었는데 나중에는 지웠다.
일단 나는 BFS를 짤때
dq = deque()
while dq:
for i in range(len(dq)):
dq.popleft()
dq.append()
answer+=1
이런 방식으로 짠다... dq의 길이만큼 pop을 해주고 그 만큼을 한 그룹으로 생각해 answer에 1을 더해 마지막에 answer를 출력한다.
다른방법은 for문을 쓰지 말고 그냥 pop을 하고 이동을 할때마다 visit 리스트 칸 안에 전 위치에서의 값 +1 을 저장하는 방법이다.
이 방법을 써야 정답으로 인식되었는데 사실 이유를 잘 모르겠다.
내가 쓴 방법도 틀린거는 아닌거 같은데 앞으로 방법을 쫌 수정해서 BFS를 짜야겠다고 생각했다.
import sys
input = sys.stdin.readline
from collections import deque
n,m = map(int,input().split())
arr = [0]*101
visit = [False] * 101
dict = dict()
for _ in range(n+m):
a,b = map(int,input().split())
dict[a] = b
dq = deque([1])
while dq:
x = dq.popleft()
if x == 100:
print(arr[x])
break
for i in range(1,7):
xi = x+i
if xi <= 100 and not visit[xi]:
if xi in dict:
xi = dict[xi]
if not visit[xi]:
visit[xi] = True
arr[xi] = arr[x] +1
dq.append(xi)
이렇게 해서 정답을 받았고 솔직히 논리는 완전 맞았는데 구현에서 쓴맛을 보니 억울하다.
더 열심히 해야할 뿐인거 같다.