일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- mysql hy000 에러
- HashSet
- append
- Stack
- 백준 2467번 용액 자바 - 이분탐색
- map
- 18111번 마인크래프트 - java 구현
- ac 5430번
- 백준 1043번 거짓말 - java 분리 집합
- kotlin
- replace()
- 백준 1647번 도시 분할 계획 - java
- 프로그래머스 자바
- 최소 힙 1927
- 백준 1197번 최소 스패닝 트리 - java
- toUpperCase
- StringTokenizer
- 백준 3190번
- hash
- StringBuilder
- HashMap
- 프로그래머스
- Java
- 프로그래머스 java
- 코틀린기초
- 백준 2473번 세 용액 - java
- 백준 14938번 서강그라운드
- 백준 1541
- 백준 1806번 부분합 java
- dp
Archives
- Today
- Total
말하는 컴공감자의 텃밭
백준 1806번 부분합 - Java 투 포인터 본문
728x90
부분합
수열이 주어지고, 연속된 수들의 합이 S보다 크며, 크기가 가장 작은 수열의 길이를 찾는 문제이다.
누적합과 슬라이딩 윈도우(투 포인터) 로 풀이가 가능할듯 했다.
나는 투 포인터로 풀었다.
시작점부터 더해가면서 S보다 크다면 조건을 거쳐 가장 앞을 하나씩 지워주는 방식으로 진행했다.
누적합의 경우 누적합 배열을 만들어주고, 이분 탐색으로 범위를 좁히면 될것 같다.
🔽 투 포인터 풀이
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | import java.io.*; import java.util.*; public class Main { // 부분합 public static int N, S; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); S = Integer.parseInt(st.nextToken()); int[] arr = new int[N]; st = new StringTokenizer(br.readLine()); for (int i = 0; i < N; i++) { arr[i] = Integer.parseInt(st.nextToken()); } int minLength = Integer.MAX_VALUE; int sum = 0; int start = 0; for (int end = 0; end < N; end++) { sum += arr[end]; while (sum >= S) { minLength = Math.min(minLength, end - start + 1); sum -= arr[start]; start++; } } if (minLength == Integer.MAX_VALUE) { System.out.println(0); } else { System.out.println(minLength); } } } | cs |
728x90
'알고리즘 > Backjoon - Java' 카테고리의 다른 글
백준 18111번 마인크래프트 - Java 구현 (0) | 2024.08.27 |
---|---|
백준 1647번 도시 분할 계획 - Java 최소 스패닝 트리 (0) | 2024.08.26 |
알고리즘 재활 15일차 - 11723, 1927, 5430번 (0) | 2024.08.19 |
알고리즘 재활치료 14일차 - 10816, 15666, 1504번 (0) | 2024.08.16 |
알고리즘 재활 13일차 - 15663, 1149, 1753번 (0) | 2024.08.15 |
Comments