[백준][C] 2003번: 수들의 합 2

2024. 11. 17. 18:02·공부하기/문제 풀기

https://www.acmicpc.net/problem/2003

 

 

누적합을 이용하는 문제이다.

 

누적합이란 수열 A가 있을 때 S[i] = A[0] + A[1] + ... + A[i] 인 수이다.

 

이 누적합을 이용해 수열의 합을 여러번 구해야할 때 속도를 매우 빠르게 할 수 있다.

 

누적합에서 다음과 같은 식을 이끌어낼 수 있다.

  1. A[i] = S[i+1] - S[i]
  2. A[i] 부터 A[i + j] 까지의 합 = S[i + j] - S[i] + A[i]
    1. A[i+1] 부터 A[i + j] 까지의 합 = S[i + j] - S[i]

 

만약 위의 문제를 계산할 때 매 경우마다 합을 구해야한다면 시간복잡도는 매우 높아진다.

(밑의 코드에서 매번 합을 구한다면 시간복잡도는 O(N^3))

 

하지만 누적합을 이용한다면 O(1)로 구할 수 있게 된다.

 

따라서 누적합을 구해놓고 이중 for문을 돌려가며 모든 경우의 구간합을 구해가며 맞는 경우 개수를 세게 된다.

 

N = 10000 이고 시간 복잡도가 0.5초이므로 O(N^2) 알고리즘을 돌릴 경우 시간초과의 위험이 존재하나 모든 for 문이 N번 회전하지는 않으므로 0.5초 정도는 충분히 감당 가능할 것이다.

 

코드보기

더보기
#include <stdio.h> 
#pragma warning(disable:4996)

int A[10000];
int S[10000];

int main()
{
	int N, M;
	int left = 0, right = 0;
	int cnt = 0;
	int sum;

	scanf("%d %d", &N, &M);

	scanf("%d", &A[0]);
	S[0] = A[0];
	for (int i = 1; i < N; i++)
	{
		scanf("%d", &A[i]);
		S[i] = S[i - 1] + A[i];
	}
	
	for (int i = 0; i < N; i++)
	{
		for (int j = i; j < N; j++)
		{
			sum = S[j] - S[i] + A[i];
			if (sum == M)
			{
				cnt++;
				break;
			}
		}
	}

	printf("%d\n", cnt);

	return 0;
}

'공부하기 > 문제 풀기' 카테고리의 다른 글

[백준][Python] 2502번: 떡 먹는 호랑이  (0) 2024.11.20
[백준][Python] 2012번: 등수 매기기  (0) 2024.11.18
[백준][C] 1103번: 게임  (0) 2024.11.16
[백준][C] 1629번: 곱셈  (0) 2024.11.13
[백준][C] 2553번 마지막 팩토리얼 수  (0) 2024.11.10
'공부하기/문제 풀기' 카테고리의 다른 글
  • [백준][Python] 2502번: 떡 먹는 호랑이
  • [백준][Python] 2012번: 등수 매기기
  • [백준][C] 1103번: 게임
  • [백준][C] 1629번: 곱셈
Potan7
Potan7
그냥 내 맘대로 올리는 곳 프사 : 카미쵸(kyamicho) (먼지먼지(jominji1374) 수정)
  • Potan7
    Potan의 개발 블로그
    Potan7
  • 전체
    오늘
    어제
    • 분류 전체보기 (28)
      • 공부하기 (24)
        • 문제 풀기 (15)
        • 마인크래프트 모드 만들기 (8)
        • 유니티 (1)
      • 프로젝트 (4)
        • 마인크래프트 디스플레이 애니메이션 툴 (4)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    모드 개발
    백분
    오블완
    거듭제곱
    2238번
    c
    파이썬
    dfs
    티스토리챌린지
    백준 1735
    1735
    이진 트리
    백준
    유니티
    문제풀이
    완전 이진 트리
    누적합
    네오포지
    나머지
    트리
    마인크래프트
    DP
    팩토리얼
    백준 분수 합
    DynamicProgramming
    힙
    알고리즘
    백준 경매
    분수 합
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Potan7
[백준][C] 2003번: 수들의 합 2
상단으로

티스토리툴바