Problem Solving/Greedy

백준 1789: 수들의 합 - 그리디

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

 

1789번: 수들의 합

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

www.acmicpc.net

1부터 +1씩 증가한 수를 원하는 수가 되거나 수를 넘게 될 때 까지 계속해서 더해줍니다.

 

만약 원하는 수가 되면 카운트 횟수를 그대로 출력하면 됩니다.

ex) 원하는 수가 6일 경우

1 + 2 + 3 -> 3개

 

만약 원하는 수를 초과하게 될 경우 count에서 -1을 해준 값을 출력합니다.

ex) 원하는 수가 4일 경우

1 + 2 + 3 = 6 

6에서 2를 빼면 4, 결국 1+3한 경우이고, 답은 2

 

얼마만큼 초과를 했던지 그 수는 지금까지 더한 숫자 중 하나 일테고, 우린 그 값이 무엇인지 알아갈 필요가 없습니다. 

초과한 만큼의 숫자를 빼겠다는 개념으로 count -1을 해주면 되기 때문입니다.

 

작은 숫자부터 더했으므로 count는 무조건 최대 값이 됩니다.

 

from sys import stdin
input = stdin.readline

target = int(input())

answer = 0
count = 0

while answer != target:
    count += 1
    answer += count
    if answer > target:
        count -= 1
        break

print(current)