300x250

1. 제목

- 백준 1789 수들의 합

- BOJ 1789 수들의 합

 

문제 링크 : 1789번: 수들의 합 (acmicpc.net)

 

1789번: 수들의 합

첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.

www.acmicpc.net


2. 풀이 과정

 

1 ~ N 개의 자연수의 합 S
1. 1부터 1씩 증가시키며 누적합 계산
2. 누적합이 S를 넘어섰다면 이전 인덱스가 최댓값

 

2번 조건문에서 실수를 했는데

if (sum >= S)
	break;

처음에는 while문을 빠져나오는 조건을 이렇게 설정을 했습니다. 누적합이 S이상 이기만 해도 빠져나와야 한다고 생각을 한 게 문제였습니다.

이렇게 하게 되면 예시로 3이 주어졌을 때

1 + 2로 

빠져나오는 조건에 충족하게 되며 이전 인덱스를 참조하게 되면 1을 리턴하며 오답을 반환하게 됩니다. 그렇기에 무조건 누적합이 S를 초과했을 때 while문을 빠져나오게 조건문을 수정하였습니다.

 


3. 코드

// 1 ~ N 개의 자연수의 합 S
// 1. 1부터 1씩 증가시키며 누적합 계산
// 2. 누적합이 S를 넘어섰다면 이전 인덱스가 최댓값

#include <iostream>

using namespace std;

int main()
{
	long long S;
	cin >> S;

	long long index = 1;
	long long sum = 0;
	while (true)
	{
		// 1. 1부터 1씩 증가시키며 누적합 계산
		sum += index;

		// 2. 누적합이 S를 넘어섰다면 이전 인덱스가 최댓값
		if (sum > S)
			break;

		index++;

	}

	cout << index - 1;

	return 0;
}
 
 
300x250

'<C++ 백준 BOJ> > 그리디' 카테고리의 다른 글

[백준 BOJ1946] 신입 사원 (C++)  (0) 2023.07.09
[백준 BOJ13305] 주유소 (C++)  (0) 2023.07.02
[백준 BOJ1026] 보물 (C++)  (0) 2023.07.02
[백준 BOJ2217] 로프 (C++)  (0) 2023.07.02
[백준 BOJ1931] 회의실 배정 (C++)  (0) 2022.10.10