[백준] 16928번 뱀과 사다리게임 -python 파이썬

2024. 10. 22. 13:59·코딩테스트/백준

문제

 

 

이 문제를 딱 보는 드는 생각은 변형된 미로 문제 같다는 생각이다. 뱀과 사다리와 같은 요소가 추가되긴 했지만 본질은 미로에서 최단경로 찾기와 같다. 

 

그렇기 때문에 BFS를 사용해서 문제를 풀어주었다.

 

 

이 문제의 까다로운 점은 뱀과 사다리 요소의 처리, 그리고 입력값이 2차원 배열에 맞게 주어지지 않는다는 것이다. 거기다가 0부터 시작이 아닌 1부터 시작이기때문에 이에 대한 처리도 해주어야한다.

 

이때 나는 입력값-1 한 것을 인덱스로 변환해주는 방법을 선택했다. 나중에 처리하게되면 값을 사용할 때마다 처리를 해주어야돼서 복잡해지기 때문에 입력값-1을 해준 후 10의 자리는 1의자리를 그대로 활용해서 인덱스로 써주었다.


코드

from collections import deque
n, m = map(int, input().split())
board = [[0] * 10 for _ in range(10)]
#사다리와 뱀을 저장하는 배열
ss = [[0] * 10 for _ in range(10)]

for _ in range(n):
    x, y = map(int, input().split())
    x-=1
    y-=1
    i = x // 10
    j = x % 10
    ss[i][j] = y
for _ in range(m):
    x, y = map(int, input().split())
    #0~99로 바꾸어줌
    x-=1
    y-=1
    i = x // 10
    j = x % 10
    ss[i][j] = y

def bfs(board,ss):
    q = deque()
    q.append((0,0))

    while(q):
        a,b = q.popleft()
        x = 10 * a + b
        for i in range(1,7):
            #nxt는 주사위를 굴려서 갈 다음 칸
            nxt = x+i
            u = nxt // 10
            v = nxt % 10
            if 0<=u<10 and 0<=v<10:
                #사다리나 뱀이 있는 칸이라면
                if ss[u][v] != 0:
                    #이동해야되는 칸의 정보 nxt에 저장
                    nxt = ss[u][v]
                    u = nxt // 10
                    v = nxt % 10
                #nxt칸이 아직 방문한 적 없고 범위내에 있다면 
                if 0<=u<10 and 0<=v<10 and board[u][v] == 0:
                    board[u][v] = board[a][b] + 1
                    q.append((u,v))

bfs(board,ss)
print(board[9][9])

 

 

일단 다음칸을 확인하는 것을 1~6까지 도는 for문을 통해서 해주었다.

 

이때 뱀이나 사다리가 없는 칸이라면 nxt = x+i가 되지만 있는 칸이라면 미리 저장해두었던 값을 2차원 배열의 인덱스형태로 변환해주어 다음 위치로 지정해주었다.

 

평소 미로 문제의 상하좌우로 이동하던 것을 주사위+뱀,사다리 이동형태로 변환해주는 것이 중요한 포인트였던 문제였던 것 같다.

'코딩테스트 > 백준' 카테고리의 다른 글

[백준]2467번 용액 - python파이썬  (2) 2024.10.23
[백준] 2589번 보물섬 - python 파이썬  (2) 2024.10.22
[백준]2096번 내려가기 - python 파이썬 feat.메모리초과 오류 해결  (1) 2024.10.17
[백준]1068번 트리 - ptyhon파이썬  (2) 2024.10.16
[백준] 2565번 전깃줄 - python 파이썬  (1) 2024.10.14
'코딩테스트/백준' 카테고리의 다른 글
  • [백준]2467번 용액 - python파이썬
  • [백준] 2589번 보물섬 - python 파이썬
  • [백준]2096번 내려가기 - python 파이썬 feat.메모리초과 오류 해결
  • [백준]1068번 트리 - ptyhon파이썬
hiwon
hiwon
천천히 굴러가는 코딩일기
  • hiwon
    하이원의 코딩 일기
    hiwon
  • 전체
    오늘
    어제
    • 분류 전체보기 (83)
      • 프론트엔드 (0)
        • react (0)
      • 백엔드 (13)
        • node.js (1)
        • spring (6)
      • 코딩테스트 (57)
        • 백준 (41)
        • 프로그래머스 (15)
      • 프로디지털아카데미 (9)
        • 클라우드 (1)
        • JavaScript (1)
      • github (1)
      • AWS (2)
      • Infra (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    알파코캠퍼스
    프디아
    AWS
    그리디
    백준
    알고리즘
    IT기획
    파이썬
    github
    코딩테스트
    UnionFind
    MSA
    python
    bastion host
    K디지털트레이닝
    프로그래머스
    백엔드
    spring
    Java
    프로디지털아카데미
    백트래킹
    코테
    BFS
    EC2
    투포인터
    신한투자증권
    kdt교육
    깃허브
    다익스트라
    알파코
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hiwon
[백준] 16928번 뱀과 사다리게임 -python 파이썬
상단으로

티스토리툴바