알고리즘
백준 22114번 창영이와 점프 (JAVA)
박카스마시며코딩
2023. 5. 20. 19:00
https://www.acmicpc.net/problem/22114
22114번: 창영이와 점프
창영이는 버스에서 내린 뒤 회사로 걸어가고 있다. 창영이가 걸어가는 길은 대부분 회색 보도블럭으로 포장되어 있는데, 가끔씩 빨간 보도블럭이 놓여있을 때가 있다. 창영이는 어린 시절 빨간
www.acmicpc.net
저는 투 포인트를 통해 문제를 해결하였습니다.
endIndex를 늘리면서 만약 k보다 크다면 한번 점프를 사용했는지를 판단하여 사용하지 않았다면 계속 진행합니다.
그 다음으로 k보다 큰 것이 나온다면 이전에 큰 점프를 한 다음 시점으로 startIndex를 옮깁니다.
이때 각각의 지점에서 endIndex - startIndex + 2의 값와 결과값을 비교하여 큰 값으로 합니다.
+2를 하는 이유는 index들이 블록을 가리키는 것이 아닌 블록들의 사이를 가리키고 있기 때문입니다.
즉, startIndex endIndex 사이의 블록들 개수 + startindex이전에 블록 하나 + endIndex이후의 블록의 값이기 때문에 +2를 해주는 것 입니다.
package BOJ.etc;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_22114 {
public static void main(String[] args) throws Exception {
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[] input = new int[n];
st = new StringTokenizer(br.readLine());
for(int i = 0 ; i < n-1 ; i++){
input[i] = Integer.parseInt(st.nextToken());
}
int result = cal(input,n,k);
System.out.println(result);
}
private static int cal(int[] input, int n, int k) {
int result = 1;
int startIndex = 0;
int endIndex = -1;
int prevUsedIndex = 0;
boolean used = false;
while(true){
endIndex++;
if(endIndex == n-1){
break;
}
if(input[endIndex] <= k){
}else if(!used){
used = true;
prevUsedIndex = endIndex + 1;
}else{
startIndex = prevUsedIndex;
prevUsedIndex = endIndex+1;
}
result = Math.max(endIndex - startIndex +2, result);
}
return result;
}
}