[알고리즘] 백준 > #2003. 수들의 합2
문제링크
풀이방법
문제가 전에 풀었던 백준 > #11659. 구간 합 구하기4와 비슷하죠? 근데 같은 부분합 배열 방식으로 문제를 해결하면 시간초과가 발생합니다. (O(n + n^2) -> 시간 제합 0.5를 쉽게 넘기 때문)
따라서, 각자 다른 원소를 가리키고 있는 2개의 포인터를 조작해 해결하는 테크닉인 투포인터를 사용해 해결했습니다!
변수들을 다음과 같이 사용했습니다.
- start: 구간 내 가장 앞의 원소를 가리킴
- end: 구간의 마지막 원소 뒤를 가리킴
따라서, 구간을 [start, end)로 설정했습니다~
코드
import java.util.Scanner;
public class SumOfNumbers {
static int[] array;
static public void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
array = new int[n + 1]; // end는 포함 되지 않아서 0 ~ (n-1)까지 값을 넣고 n은 더미로 넣어둠
for (int i = 0; i < n; i++) array[i] = sc.nextInt();
int start = 0;
int end = 0;
int sum = 0;
int result = 0;
while ((start <= end) && (end <= n)) {
if (sum == m) result++;
if (sum >= m) sum -= array[start++];
else sum += array[end++];
}
System.out.print(result);
}
}
Author And Source
이 문제에 관하여([알고리즘] 백준 > #2003. 수들의 합2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@cchloe2311/알고리즘-백준-2003.-수들의-합2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)