문제
서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?
입력
첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
출력
첫째 줄에 자연수 N의 최댓값을 출력한다.
내가 푼 풀이
- 서로다른 N개의 자연수의 합 S 가 주어지는경우 N개가 최댓값이 되기위해선, 낮은 수들끼리의 합이 되어야한다.
- S가 주어진다면 1부터 1씩 증가시키며 S를 차감해준다.
- 증가된 수가 차감된 S보다 커질때의 수가 N의 최댓값이 된다.
S = 10 일때,
- idx = 1 , S = S - idx = 9
- idx = 2 , S = S - idx = 7
- idx = 3 , S = S - idx = 4
- idx = 4 , S = idx 가되므로 N의 최댓값은 4이다. [1,2,3,4]
idx = 4 라고 서로다른 N개의 자연수가 1,2,3,4 로 된 것은 아니다.
예로 S = 4 일때
idx = 1, S = S - idx = 3
idx = 2, S = S - idx = 1
S < idx 가 되므로 N의 최댓값은 2 이지만, 서로다른 자연수는 [1,3] 이다.
이는 idx를 1씩 증감하고 S에서 빼주는것은
이전 idx가 서로다른 자연수로 들어가 있다고 생각하면된다.
예제 입력 200 의 결과는 19이다.
하지만 1에서 19까지 더한 수는 200이 아닌 190이다.
idx가 1부터 1씩 증가하면서 S를 뺄때,
idx = 19일때 S에서 idx를 빼면 S = 10
10은 이미 idx가 19까지 올라오면서 거쳤던 자연수이다.
즉 S는 [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,29] 로 N의 최댓값은 19개 , 19가 되는것이다.
따라서 S가 idx 보다 작아질때까지 실행 했을때 idx값이 N의 최댓값이 되는것이다.
import Foundation
var num = Int(String(readLine()!))!
var idx = 0
while num > idx {
idx += 1
num -= idx
}
print(idx)
'코딩테스트 > 백준' 카테고리의 다른 글
BOJ-13305 주유소 Swift (0) | 2023.05.05 |
---|---|
BOJ-10162 전자레인지 Swift (0) | 2023.05.05 |
BOJ-2217 로프 Swift (0) | 2023.05.04 |
BOJ-5585 거스름돈 Swift (0) | 2023.05.04 |
BOJ-1026 보물 Swift (0) | 2023.05.04 |