[백준] 1789번 - 수들의 합

아이디어

서로 다른 N개의 자연수의 합이 S일 때 N의 최댓값을 구하는 문제이다.
1부터 1씩 증가시키면서 200에 가까운 수를 만든다고 생각해보자.
예를 들어 S가 200이라면 1+2+...+19 = 190이라는 값을 가지게 된다.
19 다음은 20인데 20을 더하면 200을 초과하게 된다. 따라서 마지막 값을 19가 아닌 29로 더해줘야 정확히 200이라는 합이 나온다.
=> 이러한 과정을 반대로 뺄셈을 활용하여 생각해보자
S값 = 200, num = 1부터 1씩 증가시킨 값
S값에서 num을 0이 될 때까지 빼준다. 이때, num값이 남은 S값보다 클 경우, 뺄셈을 중단한다.

최종 코드

S = int(input())
num = 1

while True:
    if S >= num:
        S = S-num
        num += 1
    else:
        break

print(num-1)

좋은 웹페이지 즐겨찾기