[백준] 15565 귀여운 라이언 - Java
투 포인터를 사용해서 풀 수 있는 문제이다.
정형화 된 방법을 익히고 언제 어디서든 사용할 수 있도록 하자.
1. 배열 인덱스의 시작은 1부터 시작하도록 설정하자.
2. L과 R을 조작할 때 L은 1부터, R은 0부터 시작하고 while로 R을 조작할 때 R을 1증가시키면서 시작하자.
3. 항상 문제를 잘 읽자.
배열 인덱스의 시작을 1부터 시작하도록 설정하는거는 단순히 편의를 위해서이다.
이분 탐색을 진행할 때는 mid값을 제대로 구하기 위해 1부터 설정했었는데.. 이게 손에 익어서 계속 쓰게 됐다.
위의 형식은 문제 조건에 따라서 얼마든지 바뀔 수 있지만, 그래도 풀이의 틀을 잡아놓으면 접근하기 편한 것 같다.
import java.util.*;
import java.io.*;
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 + 1; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
int R = 0;
int ans = -1;
int sum = 0;
for(int L = 1; L<N+1; L++){
while(R < N && sum < K){
R++;
if(arr[R] == 1){
sum++;
}
}
if(sum == K){
if(ans == -1){
ans = R - L + 1;
}
ans = Math.min(ans, R - L + 1);
}
if(arr[L] == 1){
sum--;
}
}
System.out.println(ans);
}
}
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 1394 암호 - Java (0) | 2022.05.09 |
---|---|
[백준] 1644 소수의 연속합 - Java (0) | 2022.05.09 |
[백준] 2559 수열- Java (0) | 2022.05.08 |
[백준] 2003 수들의 합2- Java (0) | 2022.05.08 |
[백준] 16472 고냥이 - Java (0) | 2022.05.08 |
댓글
이 글 공유하기
다른 글
-
[백준] 1394 암호 - Java
[백준] 1394 암호 - Java
2022.05.09 -
[백준] 1644 소수의 연속합 - Java
[백준] 1644 소수의 연속합 - Java
2022.05.09 -
[백준] 2559 수열- Java
[백준] 2559 수열- Java
2022.05.08 -
[백준] 2003 수들의 합2- Java
[백준] 2003 수들의 합2- Java
2022.05.08