728x90
수들의 합4.. 공식임 이것도.. ㅠㅠ 수학하는 기분 공식 찾으면 풀 수 있고 못찾으면 틀려야되고
S[j] - S[i] = K인 j,i의 쌍들을 구해야 하는데 S[j] = K인 경우는 그냥 더해주고
S[j] != K인 경우는 S[j] - S[i] = K가 성립할 수 있는
S[i]값인 S[i] = S[j] - K를
기존에 저장해두었던 map의 값에서 꺼내서 더해줌
그리고 현재의 S[j]의 값을 map에 1개 더해줌
지금 내가 수학을 하는건가 코딩을 하는건가 모르겟음
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
41
42
43
44
45
46
47
48
49
|
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;
public class Main {
private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException{
String[] str = br.readLine().split(" ");
int N = stoi(str[0]);
int K = stoi(str[1]);
int[] preSum = new int[N+1];
str = br.readLine().split(" ");
for(int i=1; i<=N; i++) {
preSum[i] = preSum[i-1] + stoi(str[i-1]);
}
Map<Integer, Integer> map = new HashMap<>();
long res = 0;
int count = 0;
for(int i=1; i<=N; i++) {
if(preSum[i]==K)
res++;
count = map.getOrDefault(preSum[i]-K, 0);
res+=(long)count;
map.put(preSum[i], map.getOrDefault(preSum[i], 0)+1);
}
System.out.println(res);
}
private static int stoi(String input) {
return Integer.parseInt(input);
}
}
|
cs |
'알고리즘 풀이 > 백준' 카테고리의 다른 글
[백준][Java] 11656번 접미사 배열 (문자열) (0) | 2021.09.20 |
---|---|
[백준][Java] 10610번 30 (문자열) (0) | 2021.09.20 |
[백준][Java] 1912번 연속합 (DP, 누적합) (0) | 2021.09.19 |
[백준][Java] 21318번 피아노 체조 (누적합) (0) | 2021.09.19 |
[백준][Java] 11660번 구간 합 구하기 5 (누적합) (0) | 2021.09.19 |