Algorithm/Baekjoon
[백준] 22114: 창영이와 점프 - JAVA
Baspo8
2024. 7. 1. 18:59
https://www.acmicpc.net/problem/22114
풀이
뭔가 문제를 이해하는데 오래걸렸다... 컨디션 난조??
아무튼.. n개의 블럭들 사이에 거리가 얼마나 떨어져있는지 n-1개의 숫자가 주어진다.
`(블럭) 2 (블럭) 3 (블럭) 1 (블럭) 5 (블럭) 3 (블럭) 5 (블럭)`
이렇게 블럭이 위치하고있는것이다.
이차원 dp배열을 만들었다. [n][2] 사이즈로 만들어서 [i][0]의 경우 점프를 하지 않은 경우, [i][1]의 경우 점프를 한 경우이다.
다음 블럭까지 거리가 k보다 크다면 [i][1]에 [i-1][0]값에 1을 더해주고, [i][0]에는 점프를 하지 않았을 때 해당 블럭부터 시작한다는 의미로 1을 넣어준다.
k보다 작다면 이전값에서 1씩 더해준다.
값을 더하면서 정답을 같이 갱신하면 된다.
메모리: 26700KB
시간: 268ms
언어: Java 11
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
int[] arr = new int[n + 1];
st = new StringTokenizer(br.readLine());
for (int i = 1; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
int answer = 0;
int[][] dp = new int[n][2];
dp[0][0] = dp[0][1] = 1;
for (int i = 1; i < n; i++) {
if (arr[i] > k) {
dp[i][1] = dp[i - 1][0] + 1;
dp[i][0] = 1;
} else {
dp[i][0] = dp[i - 1][0] + 1;
dp[i][1] = dp[i - 1][1] + 1;
}
answer = Math.max(answer, Math.max(dp[i][0], dp[i][1]));
}
System.out.println(answer);
}
}