문제 링크

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 전에 놓았습니다.

+ Recent posts