땅지원
땅지원's Personal blog
땅지원
전체 방문자
오늘
어제
  • 전체 (353)
    • Frontend (2)
      • React (2)
    • Backend (90)
      • Java (16)
      • Python (19)
      • Spring (23)
      • Database (21)
      • Troubleshooting (8)
    • DevOps (27)
      • ELK (13)
    • CS (40)
    • OS (2)
      • Linux (2)
    • Algorithm (95)
      • concept (18)
      • Algorithm Problem (77)
    • 인공지능 (25)
      • 인공지능 (12)
      • 연구노트 (13)
    • 수업정리 (35)
      • 임베디드 시스템 (10)
      • 데이터통신 (17)
      • Linux (8)
    • 한국정보통신학회 (5)
      • 학술대회 (4)
      • 논문지 (1)
    • 수상기록 (8)
      • 수상기록 (6)
      • 특허 (2)
    • 삼성 청년 SW 아카데미 (6)
    • 42seoul (12)
    • Toy project (3)
    • 땅's 낙서장 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 20.11.6 BB21플러스 온라인 학술대회
  • 20.10.30 한국정보통신학회 온라인 학술대회

인기 글

태그

  • ㅗ
  • E
  • I
  • 이것이 리눅스다 with Rocky Linux9
  • D

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
땅지원

땅지원's Personal blog

Algorithm/Algorithm Problem

백준 16928 뱀과 사다리 게임(BFS)

2022. 5. 10. 13:11

https://www.acmicpc.net/problem/16928

 

16928번: 뱀과 사다리 게임

첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으

www.acmicpc.net

 

뱀과 사다리의 좌표가 주어진 것을 활용하기 위해 list의 in 개념을 이용하려고 했지만 비효율적인 것 같아 Dict의 key, value를 이용해서 접근 하기로 했다. 주사위를 굴려서 1~6을 이동하면서 좌표의 cnt를 기억해두는 dp배열을 하나 만들고 저장하기로 했다.

 

유의할점은 뱀과 사다리로 이동하는 것은 주사위를 굴리는 것이 아닌 행동이기 때문에 bfs를 구현할 때 

그냥 주사위로 이동할때만 cnt + 1을 해주는 것이 맞다고 생각했다.

 

from collections import deque

def bfs():
    queue = deque()
    queue.append(1)
    visited[1] = 1

    while queue:
        now = queue.popleft()
        for i in range(1,7):
            temp = now + i

            if 0 < temp <= 100 and not visited[temp]:
                if temp in ladder.keys():
                    temp = ladder[temp]

                if temp in snake.keys():
                    temp = snake[temp]

                if not visited[temp]:
                    queue.append(temp)
                    visited[temp] = 1
                    dp[temp] = dp[now] + 1



n,m = list(map(int,input().split()))
dp = [0] * 101
ladder = dict()
snake = dict()

visited = [0] * 101

for _ in range(n):
    a,b = list(map(int,input().split()))
    ladder[a] = b

for _ in range(m):
    a,b = list(map(int,input().split()))
    snake[a] = b

bfs()
#print(dp)
print(dp[100])

 

 

 

 

'Algorithm > Algorithm Problem' 카테고리의 다른 글

백준 11571 분수를 소수로(구현)  (0) 2022.05.20
백준 7662 이중 우선순위 큐(Heapq)  (0) 2022.05.12
백준 14500 테트로미노(Brute-Force, DFS)  (0) 2022.05.09
백준 9019 DSLR(시간복잡도, BFS)  (0) 2022.05.06
백준 7569 토마토(3차원배열, BFS)  (0) 2022.05.06
    'Algorithm/Algorithm Problem' 카테고리의 다른 글
    • 백준 11571 분수를 소수로(구현)
    • 백준 7662 이중 우선순위 큐(Heapq)
    • 백준 14500 테트로미노(Brute-Force, DFS)
    • 백준 9019 DSLR(시간복잡도, BFS)
    땅지원
    땅지원
    신입 개발자의 우당탕탕 기술 블로그

    티스토리툴바