PS

[백준] 1789번 : 수들의 합 - 파이썬[Python]

choisanghyun 2021. 12. 29. 13:12
728x90

문제

 

1789번: 수들의 합

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

www.acmicpc.net

 

 

코드

i=0
S=int(input())
while S>0:
  S=S-i
  i+=1
  if (S-i)<0:
    break
  
print(i-1)

 

풀이

서로 다른 N개의 자연수의 합이 입력값 S라고 할때 N의 최대값을 출력하는 문제이다.

이 문제에서 N의 최대값을 구하려면 1부터 n까지의 합을 생각해서 풀면 쉽게 풀 수 있다.

자연수 중 가장 낮은 수인 1부터 1씩 증가한 값을 더한 값이 N의 최대값이다.

만약 S가 55라고 할 때 55는 1부터 10까지의 합을 뜻하며 가장 작은 수부터 더하기때문에 10이 N의 최대값이라고 할 수 있다.

여기서 55(1+2+3+...+10에서 11을 더한 66부터는 N의 최대값이 11이 된다.

즉 55<=S<66 까지 S의 최대값은 10이라고 볼 수 있다.

이런 규칙을 활용해서

입력값 S에서 i값을 1씩 증가시키면서 빼고 S가 음수가 되기 직전 i값에서 1을 빼는 식의 풀이를 활용하면 답을 찾을 수 있다.