백준 16928 뱀과 사다리 게임 - JAVA

2025. 2. 14. 22:55·알고리즘/백준

16928 문제 링크


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

 

문제 설명


 

입출력


 

코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.util.*;
import java.io.*;
 
public class Main {
    static int N, M;
    static Queue<Integer> queue = new LinkedList<>();
    static Integer[] visit;
    static HashMap<Integer, Integer> map = new HashMap<>();
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        visit = new Integer[101];
        
        for(int i = 0; i < N + M; i++) {
            st = new StringTokenizer(br.readLine());
            map.put(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
        }
        bfs(); // 1 출발
        bw.write(String.valueOf(visit[100]));
        bw.flush();
    }
    
    private static void bfs() {
        queue.offer(1);
        visit[1] = 0;
        
        while(!queue.isEmpty()) {
            int current = queue.poll();
            for(int i = 1; i <= 6; i++) {
                int next = current + i;
                if (next <= 100 && visit[next] == null) {
                    visit[next] = visit[current] + 1;
                    if (map.containsKey(next)) {
                        queue.offer(map.get(next));
                        if(visit[map.get(next)] == null) {
                            visit[map.get(next)] = visit[next];    
                        }
                    } else {
                        queue.offer(next);
                    }
                }
            }
        }
    }
}
Colored by Color Scripter
cs

 

알고리즘 설명


해당 문제는 골드 5레벨이라고 하기에는 풀이가 생각보다 쉬운 문제라고 생각합니다. 기존 bfs문제에 일차원 배열로 진행이 되는 구조이고, 1-base-position이기 때문에 101크기의 Integer 배열을 만들고 null값인 경우에만 조건에 맞추어 배열의 값을 세팅해주는 간단한 문제입니다. 사다리와 뱀의 차이는 그저 값의 증가/감소의 차이입니다. 배열을 방문한경우의 조건을 넣어주는 것이 핵심이라고 생각합니다.

 

bfs가 큐의 자료구조를 이용하는 만큼 어느정도는 정형화된 풀이가 가능하다고 생각합니다.

 

코드 해석


N과 M을 입력받고 N+M만큼 해시맵에 사다리와 뱀의 입력값을 키: 밸류로 받습니다. visit배열에는 101만큼 크기를 설정하고, bfs로 최소 이동 횟수를 계산합니다. 이후 visit[100]을 출력합니다.

'알고리즘 > 백준' 카테고리의 다른 글

백준 12865 평범한 배낭 - JAVA  (0) 2025.02.17
백준 2805 나무자르기 - JAVA  (1) 2025.02.15
백준 1927 최소 힙 - JAVA  (1) 2025.02.13
백준 1697 숨바꼭질 - JAVA  (1) 2025.02.06
백준 1012 유기농 배추 - JAVA  (1) 2025.02.05
'알고리즘/백준' 카테고리의 다른 글
  • 백준 12865 평범한 배낭 - JAVA
  • 백준 2805 나무자르기 - JAVA
  • 백준 1927 최소 힙 - JAVA
  • 백준 1697 숨바꼭질 - JAVA
BIS's tech Blog
BIS's tech Blog
Welcome to Kanghyun's tech blog :)
  • BIS's tech Blog
    벼익숙의 기술 블로그
    BIS's tech Blog
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • 알고리즘 (46)
        • 백준 (37)
        • 프로그래머스 (9)
      • CS 스터디 (14)
        • CS - JAVA (11)
        • CS - DB (3)
      • Spring (0)
  • 블로그 메뉴

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

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    BFS
    재귀
    깊이 우선 탐색
    너비 우선 탐색
    DFS
    동적 계획
    Baekjoon
    기술질문
    브루트포스
    CS
    dp
    알고리즘 고득점 kit
    Lv2
    bottom-up
    자료구조
    프로그래머스
    Top-Down
    java
    백준
    완전탐색
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
BIS's tech Blog
백준 16928 뱀과 사다리 게임 - JAVA
상단으로

티스토리툴바