일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준 1806번 부분합 java
- toUpperCase
- 프로그래머스 java
- Stack
- HashMap
- 백준 14938번 서강그라운드
- 프로그래머스 자바
- kotlin
- 백준 1197번 최소 스패닝 트리 - java
- 백준 2467번 용액 자바 - 이분탐색
- StringBuilder
- 18111번 마인크래프트 - java 구현
- 백준 1043번 거짓말 - java 분리 집합
- append
- 백준 3190번
- 코틀린기초
- Java
- 백준 2473번 세 용액 - java
- dp
- StringTokenizer
- 백준 1541
- 백준 1647번 도시 분할 계획 - java
- mysql hy000 에러
- map
- 최소 힙 1927
- replace()
- ac 5430번
- HashSet
- hash
- 프로그래머스
Archives
- Today
- Total
말하는 컴공감자의 텃밭
백준 16928번 뱀과 사다리 게임 G5 - java 이분탐색 본문
728x90
룰은 뭐 동일하다, 뱀을 타면 해당 숫자로 내려가고, 사다리면 해당 위치로 올라간다.
위치에 사다리나 뱀으로 이동하는 위치 값을 넣어두고, 해당하는 위치로 간다면 이동해주자.
BFS를 통해 탐색하고, 큐에 배열을 넣어 주사위 횟수를 저장해주었다.
이후 최소값을 출력해주면 끝.
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 50 51 52 53 54 55 56 57 58 59 | import java.io.*; import java.util.*; public class Main { // Boj_16928_뱀과 사다리 게임 public static int N, M; // 사다리와 뱀의 수 public static int[] map = new int[101]; public static boolean[] visited = new boolean[101]; // 방문 여부 체크 public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; // 사다리와 뱀 입력 처리 st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); // 사다리 수 M = Integer.parseInt(st.nextToken()); // 뱀 수 for (int i = 0; i < N + M; i++) { // 사다리와 뱀의 정보 입력 st = new StringTokenizer(br.readLine()); int start = Integer.parseInt(st.nextToken()); int end = Integer.parseInt(st.nextToken()); map[start] = end; } System.out.println(bfs()); } // BFS를 이용하여 최소 주사위 굴림 횟수 계산 public static int bfs() { Queue<int[]> queue = new LinkedList<>(); queue.offer(new int[]{1, 0}); // 시작 위치와 주사위 굴림 횟수 visited[1] = true; while (!queue.isEmpty()) { int[] current = queue.poll(); int position = current[0]; int count = current[1]; if (position == 100) { // 도착지에 도달한 경우 return count; } for (int i = 1; i <= 6; i++) { // 주사위 굴리기 int next = position + i; if (next <= 100 && !visited[next]) { visited[next] = true; if (map[next] != 0) { // 사다리나 뱀을 통한 이동 if (!visited[map[next]]) { queue.offer(new int[]{map[next], count + 1}); visited[map[next]] = true; } } else { // 일반 이동 queue.offer(new int[]{next, count + 1}); } } } } return -1; // 이론적으로 도달할 수 없는 코드 } } | cs |
한방에 풀려서 기분이 좋았던.. 홍홍홍
728x90
'알고리즘 > Backjoon - Java' 카테고리의 다른 글
백준 22252번 정보 상인 호석 G5 - Java, Hash, 우선순위 큐 (0) | 2024.03.26 |
---|---|
백준 2110번 공유기 설치 G4 - 이분탐색 (0) | 2024.03.18 |
백준 2792번 보석상자 S1 - java 이분 탐색 (0) | 2024.03.18 |
백준 2156번 포도주 시식 S1 - DP (0) | 2024.03.18 |
백준 1956번 운동 G4 - 플로이드 워셜 자바 (1) | 2024.02.26 |
Comments