코딩테스트 & 문제 풀이

[C]백준_1789 : 수들의 합

Hicecream 2023. 12. 21. 16:27

2023년 2월 21일에 작성됨

 

https://www.acmicpc.net/problem/1789

 

1789번: 수들의 합

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

www.acmicpc.net

 

 

문제 분석

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

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