본문 바로가기

algorithm

백준 2018번 수들의 합 5

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

 

아이디어:

1. N이라는 선형 연속된 숫자 스트림을 가리키는 시작 인덱스, 종료 인덱스 두 가지

2. 시작지점은 둘 다 1을 가리키며, 합은 1

3. 합이 N보다 작으면 종료 인덱스 다음으로

4. 합이 N보다 크면 시작 인덱스 다음으로

5. 같으면 answer 1 추가, 종료 인덱스 다음으로

6. N 자체도 카운트

 

// 2018

#include <iostream>

using namespace std;

int main() {

	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int N, start_index, end_index, sum, answer;
	start_index = 1;
	end_index = 1;
	sum = 1;
	answer = 0;

	cin >> N;

	while (end_index != N) {
		if (sum < N) {
			end_index++;
			sum += end_index;
		}
		else if (sum > N) {
			sum -= start_index;
			start_index++;
		}
		else if (sum == N) {
			end_index++;
			sum += end_index;
			answer++;
		}
	}

	cout << answer + 1; // N its own

	return 0;

}

'algorithm' 카테고리의 다른 글

백준 1253번 좋다  (0) 2024.12.02
백준 1940번 주몽  (0) 2024.12.01
백준 10986번 나머지 합  (0) 2024.11.24
백준 11660번 구간 합 구하기 5  (0) 2024.11.24
백준 11659번 구간 합 구하기  (0) 2024.11.17