https://www.acmicpc.net/problem/1789
서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?
첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
첫째 줄에 자연수 N의 최댓값을 출력한다.
N개의 자연수 합이 최댓값이 되려면 1부터 2, 3, 4...까지 차례대로 더해준다.
1부터 n까지 더한 누적합이 s보다 커지게 되면, 커지기 직전의 가장 마지막에 더해준 자연수가 최댓값이 된다.
예를 들어 s=20이면,
1+2+3+4+5+6=21>20(커짐),
1+2+3+4+5=15<20(커지기 전) -> 최댓값은 5가 된다.
#include <stdio.h>
int main()
{
long long int S;
long long int i = 1, sum = 0;
scanf("%d", &S);
while (1)
{
sum += i;
if (sum > S)
{
printf("%d\n", i - 1);
return 0;
}
i++;
}
}
S를 입력받고, sum과 i의 초깃값을 각각 0과 1로 설정해준다.
무한 반복문으로 sum에 i를 더해주고, 만약 sum이 S보다 커지게 되면, 커지기 전의 값 i-1을 출력하고 프로그램을 종료한다. 아니라면 i++을 해준다.
파이썬으로도 풀었던 문제인데 같은 문제라서 다른 언어로 풀어도 구조가 거의 비슷하다. 확실하게 문제를 이해했으면 굳이 다른 언어로 여러번 풀 필요는 없을 것 같다.