https://www.acmicpc.net/problem/2015
2015번: 수들의 합 4
첫째 줄에 정수 N과 K가 주어진다. (1 ≤ N ≤ 200,000, |K| ≤ 2,000,000,000) N과 K 사이에는 빈칸이 하나 있다. 둘째 줄에는 배열 A를 이루는 N개의 정수가 빈 칸을 사이에 두고 A[1], A[2], ..., A[N]의 순서로
www.acmicpc.net
저는 Map을 통해 처음부터 현재 인덱스까지의 합을 key로 저장하고 value로 합의 개수를 저장하였습니다.
그리고 현재까지의 합을 저장하는 변수(sum)을 가지고 map에 sum-k가 있는지를 확인합니다.
sum - (sum-k) = k이기 때문에 sum-k를 map에서 찾습니다.
package BOJ.etc;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.function.Function;
public class BOJ_2015 {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
Function<String,Integer> stoi = Integer::parseInt;
int n = stoi.apply(st.nextToken());
int k = stoi.apply(st.nextToken());
Map<Long,Long> map = new HashMap<>();
long sum = 0;
st = new StringTokenizer(br.readLine());
long result = 0;
for(int i = 0 ; i < n ; i++){
long num = stoi.apply(st.nextToken());
sum += num;
if(sum == k){
result++;
}
long cnt = map.getOrDefault(sum-k,0L);
result += cnt;
map.merge(sum,1L, (v1,v2)->{
return v1 +1L;
});
}
System.out.println(result);
}
}
'알고리즘' 카테고리의 다른 글
백준 10162번 전자레인지 (JAVA) (0) | 2022.07.04 |
---|---|
프로그래머스 하샤드 수 (JAVA) (0) | 2022.07.03 |
백준 17281번 ⚾ (JAVA) (0) | 2022.07.01 |
프로그래머스 등굣길 (JAVA) (0) | 2022.06.30 |
프로그래머스 최댓값과 최솟값 (JAVA) (0) | 2022.06.29 |