[Python]백준_1789 : 수들의 합

Alal11·2022년 11월 5일
0
post-thumbnail

출처

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


문제

서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?


입력

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


출력

첫째 줄에 자연수 N의 최댓값을 출력한다.


예제 입출력


알고리즘 분류

  • 수학
  • 그리디 알고리즘

➡️문제 분석

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가 된다.


➡️코드(⭕)

s = input()                         # 자연수 합 s 입력
sum = 0                             # 누적합 담을 변수 sum 0으로 초기화
add = 1                             # 1부터 더해주기 위해 add는 1로 초기화

while (1):                          # 조건에 맞을 때까지 무한 반복
    sum += add                      # sum에 add를 더해줌

    if (int(sum) > int(s)):         # sum이 s보다 커지게 되면
        print(add-1)                # 커지기 전의 add 값 출력
        break

    add += 1                        # add를 +1 해줌

➡️코드 분석

  1. s를 입력받고, sum과 add의 초깃값을 각각 0과 1로 설정해준다.

  2. 무한반복문으로 sum에 add를 더해주고 add는 +1씩 해주는데, 만약 sum이 s보다 커지게 되면, 커지기 전의 값 add-1을 출력한다.


➡️end

이 정도 난이도까진 혼자 풀 수 있다! 좋아~~!!😆

0개의 댓글