-
백준 풀이 : 1806 부분합코테 풀이 2024. 10. 9. 19:01
import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int n = Integer.parseInt(st.nextToken()); int s = Integer.parseInt(st.nextToken()); int[] list = new int[n]; int[] sumList = new int[n+1]; st = new StringTokenizer(br.readLine()); for(int i=0; i<n; i++) { list[i] = Integer.parseInt(st.nextToken()); } sumList[1] = list[0]; for(int i=2; i<n+1; i++) { sumList[i] = list[i-1] + sumList[i-1]; } int min = n+1; for(int i=0; i<n+1; i++) { int l = i+1; while(l < n+1) { if(sumList[l] - sumList[i] >= s) { if(min > l-i) { min = l-i; } break; }else { l += 1; } } } if(min == n+1) { System.out.println(0); }else { System.out.println(min); } } }
이 문제는 투포인터를 공부하기 위해 풀었다.
투포인터는 무조건 정렬이 되어있어야 사용할 수 있기 때문에 어떻게 정렬을 할 수 있을지 생각했다.
부분합은 누적합 수열을 생각하면 오름차순 정렬이 된 수열을 얻을 수 있다.
또 하나의 중요한 점은 누적합 수열을 바로 0항부터 시작하면 0항의 값을 차를 이용해 구할 수 없다.
예를 들어 주어진 수열이 10, 1, 2, 3 이라면 누적합 수열을 10, 11, 13, 16 으로 만들면 두 항의 차로 계산했을 때 맨 앞의 항인 10을 사용할 수 없다. 따라서 누적합 수열은 0부터 시작해야한다.
다음은 정답코드이다.
'코테 풀이' 카테고리의 다른 글
백준 14502: 연구소 문제 풀이 (0) 2024.10.31 백준 1202 : 보석 도둑 풀이 (0) 2024.10.26 백준 15686 치킨 배달 - 조합, 백트레킹 (1) 2024.02.07 백준 - 16236번 아기상어 (2) 2024.01.19 백준 7562번: 나이트의 이동 (1) 2023.12.18