[BOJ 1789] 수들의 합

joon_1592·2022년 2월 27일
0

알고리즘

목록 보기
29/51

서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까? (1 \leq S \leq 4,294,967,295)

접근

i=1ni=n(n+1)2\sum_{i=1}^n i=\frac{n(n+1)}{2}이므로 S\sqrt{S}를 고려하면 O(S)O(S)안에 풀 수 있다.
최대한 서로 다른 수들의 합이려면 구조가 이렇게 된다.
n(n+1)2+(n+k)=S\frac{n(n+1)}{2} + (n + k)=Snn이 존재하며 이 때 답인 N=n+1n+1이 된다.

코드

import sys
#sys.stdin = open('input.txt', 'r')
sys.setrecursionlimit(int(1e5))
input = sys.stdin.readline

S = int(input())
ans = 1
for i in range(1, S):
    total = i + i * (i + 1) // 2
    if total < S:
        ans = i + 1
    else:
        break
print(ans)
profile
공부용 벨로그

0개의 댓글