Baek_16928

원성혁·2022년 10월 11일
0

algorithm

목록 보기
9/21
post-thumbnail

뱀게임을 도전했는데 맘이 아팠다...
이번에도 어떻게 풀지 알았고 다 짰는데... 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)

이렇게 해서 정답을 받았고 솔직히 논리는 완전 맞았는데 구현에서 쓴맛을 보니 억울하다.
더 열심히 해야할 뿐인거 같다.

profile
AI개발자를 향해 전진중

0개의 댓글