728x90
반응형
https://www.acmicpc.net/problem/1806
728x90
코딩테스트 강의를 들으며 투 포인터를 익혔다.
강의에서도 부분수열의 합에 대해서 다뤘었는데 확실히 개념을 익히고 나니까 이번 문제를 풀 수있었다.
해당 강의 링크는 위와 같다
반응형
for문으로 돌면서 우측 포인터로 지정, int형 변수 lt를 선언하여 왼쪽포인터를 지정한다.
부분 수열의 합이 S가 넘으면 왼쪽 포인터의 값을 빼주고, 길이도 빼주면서 최솟값도 같이 구한다.
package twoPointer;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
/**
*
* 백준 : 1806번 부분합
* https://www.acmicpc.net/problem/1806
*/
public class PartSum {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = stoi(st.nextToken());
int S = stoi(st.nextToken());
int min = Integer.MAX_VALUE;
int[] arr = new int[N];
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < N; i++) {
arr[i] = stoi(st.nextToken());
}
int lt = 0, sum = 0, len = 0;
for (int rt = 0; rt < N; rt++) {
sum += arr[rt];
len++;
if(len > 1) {
while(sum >= S) {
min = Math.min(min, len);
sum -= arr[lt++];
len--;
}
}
}
if(min == Integer.MAX_VALUE) min = 0;
System.out.println(min);
}
public static int stoi(String str) {
return Integer.parseInt(str);
}
}
728x90
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
[백준/java] 2470번: 두 용액 - 투 포인터 (0) | 2021.09.24 |
---|---|
[백준/java] 1920: 수 찾기 - 이분 탐색 (0) | 2021.09.23 |
[백준/java] 10026번: 적록색약 - DFS (0) | 2021.09.10 |
[백준/java] 17086번: 아기 상어2 - BFS (0) | 2021.08.26 |
[백준/java] 13335번: 트럭 (프로그래머스와 동일) (0) | 2021.08.25 |
댓글