백준

백준 1789

gilola 2024. 12. 23. 23:26

다시 백준 시작!! 알고리즘 안한지 너무 오래돼서 쉬운 문제부터 시작했다.

 

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

 

해설: N이 최댓값이려면 최대한 1부터 연속적으로 더해야한다고 생각. 예제에서 주어진 200같은 경우는 18까지 연속적으로 더하고 남은 29를 더하는 식으로 구해야겠다고 생각. input인 s를 1~n까지의 합을 구하는 식을 역으로 풀어서 n를 구함p/2 는 1~n까지의 합, q/2 1~n+1 까지의 합 s가 그 사이에 있다면 답은 n이고 그것보다 크다면 답은 n + 1

import math

s = int(input())

n = int(math.sqrt(s * 2)) - 1

p = (n + 1) * n
q = (n + 2) * (n + 1)

if s >= p / 2 and s < q / 2:
    print(n)
else :
    print(n + 1)  


 

추가로 .. 다 풀고 다른 사람들의 답을 보니까 그냥 1부터 n까지 더하는 방식으로 풀엇더라 ㅎㅋ 내가 너무 꼬아서 간듯 

'백준' 카테고리의 다른 글

백준 25757  (0) 2025.01.08
백준 12852  (1) 2024.12.28
백준 2579  (0) 2024.12.28
백준 1541  (0) 2024.12.27
백준 11758  (0) 2024.12.26