[백준]1789번: 수들의 합

김희윤·2023년 3월 25일
0

백준

목록 보기
2/2

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

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

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

생각의 흐름

  1. 어떤 유리를 쪼개는 상황을 상상해보면, 쪼개지는 조각의 개수가 가장 많을려면, 각각의 조각이 작아야 한다. 이를 이 문제에 대입해보면 서로 다른 N개의 자연수 각각이 최소한 작아야지 N이 최대가 될 수 있다.

  2. 서로 다른 N개의 자연수들을 최소한으로 만들기 위해서는 1부터 시작하여 1씩 증가하는 수들로 구성해야 한다.

  3. 따라서 이 문제는 1부터 N까지 합이 S보다 작은 N의 최대값을 구하는 문제이다.

s = int(input())
index = 1 # N의 역할을 한다.
sum = 1 # 1부터 N까지의 합이다.
while sum<=s: 
  index += 1 
  sum += index

print(index-1) 
# while문 조건이 sum<=3이므로,
# 이미 최대값 index가 정해지더라도 반복이 한 번 더 실행된다.
# 따라서 -1로 최대값 index를 출력한다.

profile
탑 개발자를 향해 오늘도 정진한다.

0개의 댓글