jyamethyst21 님의 블로그

백준 1789번 - '수들의 합' (PYTHON 풀이) 본문

CODING 💻

백준 1789번 - '수들의 합' (PYTHON 풀이)

jyamethyst21 2026. 2. 15. 00:51

문제:

 

서로 다른 자연수 N개를 더해서 S를 만들 때, S를 만들기 위해 몇 개의 자연수가 사용되는지 구하는 문제이다.

이때 가장 많은 개수를 넣어서 입력값을 만들어야 한다.

 

풀이:

N = int(input())
n = 0
sum = 0

while True:
    n += 1
    sum += n
    if sum > N:
        n -= 1
        break
print(n)

S에 해당하는 값을 입력받고, 최종적으로 출력할 개수와 S보다 작을 때까지만 더해줘야하므로 이 합계를 계산할 sum 변수를 선언한다.

이후 무한반복을 위해 while을 선언하고 n은 카운트되는 자연수의 개수이므로 1씩 커지고, sum은 n만큼 커지므로(n은 1부터 순차적으로 1씩 커짐) 이를 코드로 만든다.

 

이후 sum이 S보다 작을 때까지만 이 과정을 반복해야 하기 때문에 만약 크게 되면 이미 자연수 개수인 n은 S보다 값이 커지게 만들도록 개수가 세진 것이므로 1을 빼줘서 저장한다.

예를 들어, S가 16이라고 가정해보겠다. 1부터 5까지 더하면 15가 되고, 여기서 6을 더하면 21이 되므로 1~5 즉 5개만 출력되도록 만들어야 한다. 이 경우 21 > 15인 경우이기 때문에 if문이 실행되고, 이 상태는 S보다 큰 경우이므로 1을 빼서 sum을 줄여줘야한다. 그러면 sum이 1~5를 더한 15가 되기 때문에 조건이 성립하게 되어 최종적으로 6개가 아닌 5개가 출력될 것이다.