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;
}
}
'알고리즘' 카테고리의 다른 글
프로그래머스 두 수의 합 (JAVA) (0) | 2023.05.22 |
---|---|
백준 5639번 이진 검색 트리 (JAVA) (0) | 2023.05.21 |
백준 16441번 아기돼지와 늑대 (JAVA) (1) | 2023.05.19 |
프로그래머스 삼각 달팽이 (JAVA) (0) | 2023.05.18 |
프로그래머스 정수를 나선형으로 배치하기 (JAVA) (0) | 2023.05.17 |