[BOJ] 1789 - 수들의 합 (🥈실버 5티어)
사용 언어: Python3
문제
풀이
나의 풀이
S = int(input())
# 1부터 N까지 합의 합이 S가 되는 N (근의 공식 이용)
N = int(((1 + 8 * S)**0.5 - 1) // 2)
print(N)
- 테스트 케이스: 통과
- 제출 결과: 통과
- 서로 다른 N개의 자연수의 합이 S인데, N의 “최댓값”을 구하는 문제니까 = “1부터 N까지의 합이 S이다” 라고 생각했다.
- 학생 때 배운 공식을 떠올려보면 1부터 N까지의 합은
N * (N+1) // 2
이다. - 따라서
N * (N+1) // 2 = S
를 만족하는 N를 찾아야 하고, 근의 공식을 이용하면N = ((1 + 8 * S)**0.5 - 1) // 2
이 나온다. - 위 식에
int()
를 씌워 자연수로 변환해주면 된다,
💛 개인 공부 기록용 블로그입니다. 👻