일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 정수론
- DB
- 프로젝트
- 깊이 우선 탐색
- 문자열
- 그래프 탐색
- n과 m
- 수학
- 재귀
- 너비 우선 탐색
- 자료 구조
- 알고리즘
- Vue
- SWEA
- dfs
- 구현
- Spring Security
- 정보처리기사
- 스택
- 프로그래머스
- 소수 판정
- 백준
- springboot
- JPA
- 브루트포스 알고리즘
- 백트래킹
- 그래프 이론
- 배포
- MYSQL
- 다이나믹 프로그래밍
Archives
- Today
- Total
영원히 남는 기록, 재밌게 쓰자
백준 [11060] 점프 점프 (자바) 본문
728x90
반응형
문제
입력
첫째 줄에 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 Ai (0 ≤ Ai ≤ 100)가 주어진다.
출력
재환이가 최소 몇 번 점프를 해야 가장 오른쪽 끝 칸으로 갈 수 있는지 출력한다. 만약, 가장 오른쪽 끝으로 갈 수 없는 경우에는 -1을 출력한다.
풀이
- 해당 idx의 값이 오른쪽으로 이동할 수 있는 최소한의 값이다.
- 1부터 이동할 수 있는 값까지 더해주면서 이동할 수 있다면 큐에 삽입
- N-1이면 점프 횟수를 출력한다.
- N-1까지 탐색할 수 없다면 -1 출력한다.
처음 bfs를 생각하고 풀었는데 방문노드를 사용하지 않아서 실패했었다..
dp로 풀이하는 방식도 함께 추가하였다.
dp의 경우 최소 값을 구하는 경우라서 dp 배열을 모두 Integer.MAX_VALUE로 초기화 시킨 것 때문에 long 배열로 선언했다.
정답 코드
bfs 풀이
package com.baekjoon.p11060;
import java.io.*;
import java.util.*;
public class Main {
static int N;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
long[] dp = new long[N + 1];
int[] arr = new int[N + 1];
StringTokenizer st;
st = new StringTokenizer(br.readLine());
for (int i = 1; i <= N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
dp[i] = Integer.MAX_VALUE;
}
dp[1] = 0;
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= arr[i]; j++) {
if (i + j <= N)
dp[i + j] = Math.min(dp[i + j], dp[i] + 1);
}
}
if (dp[N] == Integer.MAX_VALUE) {
System.out.println(-1);
} else {
System.out.println(dp[N]);
}
}
}
dp풀이
package com.baekjoon.p11060;
import java.io.*;
import java.util.*;
public class Main {
static int N;
static int[] arr;
static boolean[] v;
static class Node {
int idx;
int cnt;
Node(int idx, int cnt) {
this.idx = idx;
this.cnt = cnt;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
arr = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
bfs(0);
}
static void bfs(int start) {
Queue<Node> q = new ArrayDeque<>();
v = new boolean[N];
v[start] = true;
q.add(new Node(start, 0));
while (!q.isEmpty()) {
Node now = q.poll();
if (now.idx == N - 1) {
System.out.println(now.cnt);
return;
}
for (int i = 1; i <= arr[now.idx]; i++) {
int nextIdx = now.idx + i;
if (nextIdx < N && !v[nextIdx]) {
v[nextIdx] = true;
q.add(new Node(nextIdx, now.cnt + 1));
}
}
}
System.out.println(-1);
}
}
728x90
반응형
'Algorithm > 백준' 카테고리의 다른 글
백준 [12891] DNA 비밀번호 (자바) (0) | 2024.05.29 |
---|---|
백준 [24444] 알고리즘 수업 - 너비 우선 탐색 1 (자바) (0) | 2024.05.28 |
백준 [2156] 포도주 시식 (자바) (0) | 2024.05.27 |
백준 [2961] 도영이가 만든 맛있는 음식 (자바) (0) | 2024.05.24 |
백준 [15990] 1, 2, 3 더하기 5 (자바) (0) | 2024.05.24 |