728x90
1. 문제
https://www.acmicpc.net/problem/1806
2. 접근 방법
- N개의 수열에서 부분합 중 합이 S가 되는것을 구하는 문제이다.
- 완탐으로 푼다면 10만 *10만 시간초과가 발생할 것이다.
- 따라서 투포인터로 풀 수 있었다.
3. 코드
<java />
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
private static StringBuilder sb;
private static BufferedReader br;
private static StringTokenizer st;
private static int N,S;
private static int[]arr;
private static int count = 0;
private static int min = Integer.MAX_VALUE;
//입력
public static void input() throws Exception {
br = new BufferedReader(new InputStreamReader(System.in));
sb = new StringBuilder();
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
S = Integer.parseInt(st.nextToken());
arr = new int[N+1];
st = new StringTokenizer(br.readLine());
for(int i = 0 ; i < N ; i++){
arr[i] = Integer.parseInt(st.nextToken());
}
}
//실행
public static void process() {
int s = 0 ;
int e = 0 ;
int sum = 0;
while(s <= N && e <= N){
if(sum<S){
sum+=arr[e];
e++;
}else{
sum-=arr[s];
s++;
}
if(sum>=S){
min = Math.min(min,e-s);
}
}
if(min == Integer.MAX_VALUE){
System.out.println(0);
}else System.out.println(min);
}
public static void main(String[] args) throws Exception {
input();
process();
}
}
'코딩테스트 > 백준' 카테고리의 다른 글
[Java] 백준 15961번 : 회전 초밥 (0) | 2024.05.28 |
---|---|
[Java] 백준 22945번 : 팀 빌딩 (0) | 2024.05.27 |
[Java] 백준 15831번 : 준표의 조약돌 (0) | 2024.05.27 |
[Java] 백준 16472번 : 고냥이 (0) | 2024.05.27 |
[Java] 백준 14465번 : 소가 길을 건너간 이유 5 (0) | 2024.05.26 |