문제 링크
https://www.acmicpc.net/problem/1789
1789번: 수들의 합
첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
www.acmicpc.net
문제
/**
문제
서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?
입력
첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.
출력
첫째 줄에 자연수 N의 최댓값을 출력한다.
예제 입력 1
200
예제 출력 1
19
*/
제출한 답안
import Foundation
func maximum(max S: Int) -> Int {
var sum = 0
var N = 0
for i in 1... {
sum += i
guard sum <= S else {
break
}
N = i
}
return N
}
let S = Int(readLine()!)!
print(maximum(max: S))
풀이
처음에 읽어보았을때 N의 최댓값은 결국 제일 작은 숫자인 1부터 하나씩 증가한 값을 더해가는 경우의 최대값이라는 생각이 들었습니다.
1부터 하나씩 더해가려면 for문 1... 을 활용하면 좋을거 같았어요.
특정 조건일때 멈추려면 java라면 if break 가 있겠지만, swift는 특정 조건이 아닐때만 멈추면 되니 guard문이 더 괜찮았습니다.
더하고 나서 멈추려니 200입력에서 20이 출력되는 즉, sum이 200초과한 상태에서 S와 비교가 되어서 어떻게 하면 전 상태의 값을 기억할 수 있을까 생각해보았습니다.
해결법은 'i를 sum에 더한 다음에 i값을 N에 따로 저장하되 비교하기 전에 저장해 놓자' 였습니다. 그래서 guard문을 N 전에 놓았습니다.
'iOS > 알고리즘' 카테고리의 다른 글
[프로그래머스]기능개발 (0) | 2021.08.23 |
---|---|
[프로그래머스]모의고사 (0) | 2021.08.22 |
[프로그래머스]K번째수 (0) | 2021.08.12 |
[프로그래머스]수박수박수박수박수박수? (0) | 2021.08.12 |
[프로그래머스]짝수와 홀수 (0) | 2021.08.12 |