멋쟁이v의 개발일지

[백준 1789번] 수들의 합(파이썬) 본문

0년차/알고리즘(그리디)

[백준 1789번] 수들의 합(파이썬)

멋쟁이v 2022. 11. 17. 17:39
728x90
320x100
문제
서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?

 

입력
첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
출력
첫째 줄에 자연수 N의 최댓값을 출력한다.

 

예제 입력 1
200
예제 출력 1
19

 


 

풀이
이 문제는 자연수의 합이 주어질 때 서로다른 N개의 자연수들의 합으로 만들어 질 수 있는 N 갯수의 최댓값을 구하는 문제입니다.

예를 들어서 15가 주어졌을 때
14 + 1 = 15 (2개)
12 + 2 + 1 =15 (3개)
9 + 3 + 2 + 1 = 15 (4개)
5 + 4 + 3 + 2 + 1 =15 (5개)
서로다른 자연수들의 합으로 만들어 질 수 있는 갯수의 최댓값은 5개 입니다.

서로다른 N개의 자연수의 갯수는 1부터 시작하여 차례로 더했을 때의 갯수가 최댓값이 되겠습니다.

코드를 순서대로 작성한다면
1. 주어진 수와 비교할 변수와 +1씩 더해서 저장할 변수를 선언
2. While문을 통해 주어진 수보다 크거나 같아질 때까지 반복
3. 반복문안에 계산식 작성(코드 확인)


작성 코드
S = int(input())
sum = 0
i = 1
answer = 0

while S >= sum: # 더해진 수가 S보다 작거나 같을 때까지 반복
    sum += i  # sum에 차례로 i만큼 더해서 저장
    i += 1 # 반복할 때마다 i는 1씩 증가
    answer += 1 # 자연수 갯수 카운트
    
print(answer-1) # 마지막 While문까지 반복했으니 -1을 해주고 출력
728x90
320x100
Comments