어제 투 포인터 풀어서 혼자 풀자고 몇시간 붙잡고 있었지만
못품 빡치네 ^^........................................
https://www.acmicpc.net/problem/1806
package algo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.StringTokenizer;
public class BJ_1806 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
PriorityQueue heap = new PriorityQueue();
int N = Integer.parseInt(st.nextToken());
int S = Integer.parseInt(st.nextToken());
int a[] = new int [N];
int start =0;
int end =0;
int sum =0;
int res = 0;
// int res[] = new int [N]; //결과 배열
st = new StringTokenizer(br.readLine());
for(int i=0; i a[i] = Integer.parseInt(st.nextToken());
// System.out.println(a[i]);
}
while(true) { //start, end 가 끝에 도달하면 멈춤
if(sum>=S) { //sum이 S보다 크면
sum -=a[start++]; //sum에 start값을 증가 시켜서 빼줌
}else if(end == N) { //굳이 S에 대한 조건을 지정을 안해 준 것은 조건문을 안거치고 내려왔다는 것은 s가 이동을 해도
break; //sum 값이 N을 못넘는 다는 것이기 때문에 그냥 끝내 버린다.
}else { //sum이 S보다 작으면
sum +=a[end++]; //sum에 end값을 증가 시켜서 더해줌
}
if(sum>=S) {
heap.add(end-start);
}
}
if(heap.size() == 0) {
System.out.println(0);
}else {
System.out.println(heap.peek());
}
}
}
----------------------------------------------------------------------------------------------------
https://blog.naver.com/jyh9023/221784135137
젤 적은 값 계산하기 싫어서 PriorityQueue 썼는데 이거 써도 되는지 몰겠다 ..
while 하고 if 문 하는 것 때메 계속 안돼서 결국 블로그 봤다. ...
찾아보니 if절의 위치를 절묘하게 하는 것이 핵심이라는데 WHY???? 재수없네,,
나는 if절을
if(sum < S){
sum +=a[end++]; // 이렇게 먼저 시작했는데 블로그에는 줄여주는 걸 먼저 한다
}
저 순서가 이해가 안됨
이해해보기......
'백준알고리즘' 카테고리의 다른 글
백준 1926 그림[BFS] (0) | 2020.04.23 |
---|---|
백준 11720 숫자의 합 charAt (0) | 2020.04.22 |
백준 2096 내려가기 [DP][슬라이딩 윈도우] (0) | 2020.04.19 |
백준 2003 수들의 합 2 [투 포인터] (0) | 2020.04.18 |
백준 11403 경로 찾기 (0) | 2020.04.17 |
댓글