1789번: 수들의 합
let S = Int(readLine()!)!
var n = 0
repeat {
n += 1
} while S >= n * (n + 1) / 2
print(n - 1)
- 문제가 너무 짧아서 이해하기 힘든... 그런 스타일입니다.
- “서로 다른” N개의 자연수의 합이 S인데
- S가 주어졌을 때 N의 최댓값을 찾는 것이 문제입니다.
- N개의 자연수가 “서로 달라야"하므로 최대한 가장 작은 자연수인 1부터 꽉꽉 채워 넣는 것이 필요합니다.
- 자연스럽게 1 ~ n까지의 가장 작은 수들을 나열해서 더하는 것이 N의 최댓값을 구하는 방법입니다.
- 등차수열의 합 공식 n * (n + 1) / 2를 활용합시다.
- n을 1부터 늘려가면서 S가 n * (n + 1) / 2보다 작아질 때까지 반복합니다.
- S가 n * (n + 1) / 2보다 작아졌다면 1부터 n까지 더했을 때 S보다 크다는 뜻이므로 -1을 해서 출력합시다.