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

    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을 빼는 식의 풀이를 활용하면 답을 찾을 수 있다.

    댓글