[C]백준_1789 : 수들의 합

Alal11·2023년 2월 21일
0
post-thumbnail

출처

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++;
	}
}

➡️코드 분석

  1. S를 입력받고, sum과 i의 초깃값을 각각 0과 1로 설정해준다.

  2. 무한 반복문으로 sum에 i를 더해주고, 만약 sum이 S보다 커지게 되면, 커지기 전의 값 i-1을 출력하고 프로그램을 종료한다. 아니라면 i++을 해준다.


➡️end

파이썬으로도 풀었던 문제인데 같은 문제라서 다른 언어로 풀어도 구조가 거의 비슷하다. 확실하게 문제를 이해했으면 굳이 다른 언어로 여러번 풀 필요는 없을 것 같다.

0개의 댓글