@투포인터, 슬라이딩 윈도우 / 14m
설마 진짜 이렇게 하면 풀리나 했는데 진짜였다.
투포인터 개념을 이 글을 보고 공부했는데, 이 방법으로 풀면 바로 풀 수 있다.
풀이는 이 글이 훨씬 잘 나와 있으므로 따로 적지 않았다.
문제 링크
https://www.acmicpc.net/problem/1806
삽질 포인트
만일 그러한 합을 만드는 것이 불가능하다면 0을 출력하면 된다.
이 조건을 못보고 풀어서 틀렸습니다가 떴다.
처음에는 long으로 풀어야 되는건가? 라고도 생각했는데,
배열의 최대 길이가 100,000이고, 한 칸의 최대값이 10,000이라
sum의 최댓값이 10억이므로 int형으로도 충분히 가능하다.
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N, S, arr[];
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
S = Integer.parseInt(st.nextToken());
arr = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++)
arr[i] = Integer.parseInt(st.nextToken());
System.out.println(slide());
}
private static int slide() {
int s = 0, e = 0, sum = 0, min = N + 1;
while (true) {
if (sum >= S) sum -= arr[s++];
else if (e == N) break;
else sum += arr[e++];
if (sum >= S)
if (min > e - s)
min = e - s;
}
if (min == N + 1) min = 0;
return min;
}
}
ㅋㅋㅋㅋㅋㅋㅋ
끝!
'algorithm > Baekjoon' 카테고리의 다른 글
[백준] 18809.Gaaaaaaaaaarden / BFS, 조합 (0) | 2020.09.03 |
---|---|
[백준] 17142.연구소3 (java) / 조합, BFS (0) | 2020.05.30 |
[백준] 2531/15961.회전초밥 (java) / 투포인터, 슬라이딩 윈도우 (0) | 2020.03.14 |
[백준] 1644.소수의 연속합 (java) / 투포인터, 슬라이딩 윈도우, 에라토스테네스의 체(소수 구하기) (0) | 2020.03.14 |
[백준] 2075.N번째 큰 수 (java) / 시뮬레이션? (0) | 2020.03.13 |
댓글