[알고리즘] 백준 16928 뱀과 사다리

CHOI IN HO·2024년 2월 19일
0

코딩테스트

목록 보기
52/74

풀이

  1. 이미 방문한 번호에 대한 처리를 해주어야 시간초과 및 메모리 초과를 해결할 수 있다.
  2. 주사위대로만 가는경우, 뱀에 걸리는 경우, 사다리 통해 가는 경우를 다 넣어주어야한다.
from collections import deque
import sys
n, m = map(int, input().split())

sadari = [list(map(int, sys.stdin.readline().split())) for _ in range(n)]

bam = [list(map(int, sys.stdin.readline().split())) for _ in range(m)]
ba = []
for i in range(m):
    ba.append(bam[i][0])

visited = [0]*200

def bfs(x,cnt):
    q = deque()
    q.append((x,cnt))

    while q:
        nx , cnt= q.popleft()
        if visited[nx] == 0:
            visited[nx] = 1
        else: continue
        if nx == 100:
            return print(cnt)

        for i in range(6, 0, -1):
            if nx+i > 100:
                continue
            if (nx+i) not in ba:
                q.append((nx+i, cnt+1))
            for k in range(m):
                if bam[k][0] == nx+i:
                    q.append((bam[k][1], cnt+1))
            for j in range(n):
                if sadari[j][0] == nx+i:
                    q.append((sadari[j][1], cnt+1))


bfs(1, 0)


profile
개발자기 되기 위해선 무엇이든!

0개의 댓글