알고리즘 공부/백준

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

뚜써 2022. 1. 14. 04:24

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

 

1789번: 수들의 합

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

www.acmicpc.net

 

문제

 

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

 

입력

 

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

 

출력

 

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

 

풀이

 

처음 풀이는 S에서 1부터 n까지 차례대로 빼면서 남은 수가 n보다 작거나 같다면 n에 남은 수를 더하여 빼줌으로써 n의 최댓값을 구했다.

하지만 이 풀이는 시간 초과 에러가 발생했다.

처음 풀이의 아이디어의 핵심은 1부터 n까지의 합을 빼고, 남은 수가 n보다 작거나 같으면 남은 수를 n에 더해서 빼는 것이었다.

따라서 합 공식을 사용하면 시간 복잡도를 줄일 수 있을 것이라고 생각했고, 이를 적용시켜 n의 최댓값을 구하였다.

이 풀이는 문제 없이 통과하였다.

 

소스 코드

 

s = int(input())

for i in range(1, s+1):
    sum = i*(i+1)/2
    if s - sum <= i:
        print(i)
        break