BOJ 2015 수들의 합 4

2020. 9. 23. 15:03·알고리즘/BOJ

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

각각 i부터 j까지의 부분합 중 k인 수가 몇 개인지 세는 문제이다.

일단 prefix sum을 통해서 배열을 채웠는데

	for (int i = 1; i <= n; i++) {
		cin >> x; d[i] += d[i - 1] + x;
	}

이 후가 문제이다. 여기서 각각의 원소에 대해서 \(O(N^2)\) 으로 짜면 시간 초과가 난다.

따라서 i 부터 j 사이의 부분합의 개수를 Log N으로 찾아야 한다.

여기서 map이 사용된다.

	for (int i = 1; i <= n; i++) {
		if (d[i] == k) cnt++;
		cnt += M[d[i] - k];
		M[d[i]]++;
	}

한 줄씩 살펴보면,

 

		if (d[i] == k) cnt++;

d[i]가 k와 같으면 카운트 증가.

		cnt += M[d[i] - k];

현재까지의 누적합에서 k를 뺀 값을 키값으로 해서 카운트를 증가시켜준다. 즉

d [i] - d [j] == k 인 값을 찾는 것이다.

#include <iostream>
#include <map>
using namespace std;

int d[200001];
map<int, long long> M;

int main() {
	ios::sync_with_stdio(false); cin.tie(0);

	long long n, k, x, cnt = 0;
	cin >> n >> k;
	for (int i = 1; i <= n; i++) {
		cin >> x; d[i] += d[i - 1] + x;
	}
	for (int i = 1; i <= n; i++) {
		if (d[i] == k) cnt++;
		cnt += M[d[i] - k];
		M[d[i]]++;
	}
	cout << cnt << endl;

	return 0;
}

 

'알고리즘 > BOJ' 카테고리의 다른 글

BOJ 1644 소수의 연속합  (0) 2020.09.23
BOJ 2096 내려가기  (0) 2020.09.23
BOJ 팰린드롬?  (0) 2020.09.22
BOJ 18870 좌표 압축  (0) 2020.09.21
BOJ 1747 소수&팰린드롬  (0) 2020.09.21
'알고리즘/BOJ' 카테고리의 다른 글
  • BOJ 1644 소수의 연속합
  • BOJ 2096 내려가기
  • BOJ 팰린드롬?
  • BOJ 18870 좌표 압축
khyu2
khyu2
  • khyu2
    dev log
    khyu2
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘
        • BOJ
        • Programmers
        • Algorithm
        • SWEA
      • 개발
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩테스트 연습
    SWEA
    dfs
    냅색
    완전 탐색
    시뮬레이션
    행렬 제곱
    구현
    우선순위 큐
    다익스트라
    트리
    이분탐색
    유니온 파인드
    분할 정복
    BFS
    피보나치 수
    이분 탐색
    큐
    프로그래머스
    완전탐색
    소수
    알고리즘
    GREEDY
    조합
    팰린드롬
    피사노 주기
    dp
    크루스칼
    MST
    BOJ
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
khyu2
BOJ 2015 수들의 합 4
상단으로

티스토리툴바