두 개의 숫자를 가지고 M을 만들 수 있는 방법이 얼마나 있는지 구하는 문제다.
투 포인터 문제!
다만, 비슷한 문제는 많이 풀어봤어도 이렇게 투 포인터라고 의식해서 푼 건 거의 처음 아닐까...
그리고 주의해야 할 점이 있는데 바로 누적합이 아니라는 거다. 두 숫자를 더해서 구하는 문제이지 누적합이 아니다! 누적 합으로 구해놓고 왜 안 되는 거지? 싶어서 풀이까지 찾아본 1인...
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args)throws IOException{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(reader.readLine());
int m = Integer.parseInt(reader.readLine());
int[] material = new int[n];
StringTokenizer st = new StringTokenizer(reader.readLine());
for (int i=0; i<n; i++) {
material[i] = Integer.parseInt(st.nextToken());
}
int sum = 0;
int answer = 0;
for(int start=0; start<n; start++) {
sum = 0;
int end = start+1;
while (end<n) {
sum = material[start];
sum += material[end++];
if (sum == m) {
answer++;
break;
}
}
}
System.out.println(answer);
}
}
원래 아침 5시30분 즈음에 알고리즘 문제를 하나 풀면서 하루를 시작하는데, 오늘은 너무 컨디션이 안 좋았다. 이렇게 간단한 문제조차 내용 파악도 못 하고... ㅎㅎ. 심지어 중간에 다시 잠. ㅋㅋㅋㅋㅋ...
https://www.acmicpc.net/problem/1940
참고 코드, https://hidelookit.tistory.com/178