투포인터 를 이용해서
문제를 풀어 보았습니다.
import java.util.Scanner;
public class N1806 {
public static void main(String[] args) {
N1806 T = new N1806();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int s = kb.nextInt();
// 투포인터를 사용하기위해서 배열을 한칸 늘림
int[] arr = new int[n+1];
for (int i = 0; i < n; i++) {
arr[i] = kb.nextInt();
}
System.out.println(T.solution(n, s, arr));
}
public int solution(int n, int s, int[] arr) {
int len = Integer.MAX_VALUE;
//lt 는 left target rt는 right target 을 의미
// sum 이 s보다 작으면 rt값 증가 시키고, sum이 s보다 크면 lt를 증가시킴
int lt = 0, sum = 0, rt = 0;
while (lt <= rt && rt <= n) {
if (sum < s) {
sum += arr[rt++];
} else if (sum >= s) {
len = Math.min(len, rt - lt);
sum -= arr[lt++];
}
}
return len==Integer.MAX_VALUE ? 0 : len;
}
}
'💻 개발공부 > Algorithm' 카테고리의 다른 글
[Eric's 백준] 10809번 - 알파벳찾기 - Java (0) | 2023.01.26 |
---|---|
[Eric's 백준] 3273번 - 두 수의 합 - Java (0) | 2023.01.18 |
[Eric's 백준] 1712번 - 손익분기점 - Java (0) | 2023.01.17 |
[Eric's 백준] 27160번 - 할리갈리 - Java - 2023보드게임컵 (0) | 2023.01.15 |
[Eirc's 백준] 1764번 - 듣보잡 - Java 알고리즘 (0) | 2023.01.15 |