https://www.acmicpc.net/problem/1789
문제
서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?
입력
첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
출력
첫째 줄에 자연수 N의 최댓값을 출력한다.
풀이
그리디 알고리즘을 사용하여 해결하였다. 최대한 많은 수의 자연수를 포함시키는 것이 목표이므로 가장 작은 수부터 순서대로 더하는 것이 가장 효과적인 전략이다.
C++ 소스 코드
#include <iostream>
using namespace std;
int main() {
unsigned long long S;
cin >> S;
unsigned long long sum = 0;
int N = 0;
for (int i = 1; sum + i <= S; i++) {
sum += i;
N = i;
}
cout << N << endl;
return 0;
}
'Algorithm > BAEKJOON' 카테고리의 다른 글
[Algorithm] BAEKJOON 11000번: 강의실 배정 (C++) (0) | 2024.09.15 |
---|---|
[Algorithm] BAEKJOON 1946번: 신입 사원 (C++) (8) | 2024.09.14 |
[Algorithm] BAEKJOON 2217번: 로프 (Python) (1) | 2024.09.14 |
[Algorithm] BAEKJOON 1541번: 잃어버린 괄호 (Python) (1) | 2024.09.14 |
[Algorithm] BAEKJOON 1485번: 정사각형 (C++) (0) | 2024.09.11 |