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 |