포스트

174. 약수의 합

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
func solution(_ n:Int) -> Int {

    var answer = 0

    if n >= 0 && n <= 3000 {
        if n == 0 {
            answer = 0
        } else {
            for i in 1 ... n {

        		if n % i == 0 {
            		answer += i
        		} 

    		} 
        }
    }

    return answer
}

이렇게 작성한 이유

처음에 코드를 n == 0인 조건을 하지않고 작성하고 제출을 하니 에러가 났다. 생각해보니 n = 0일때는 for문이 1부터 시작이라 논리적으로 맞지 않다는것을 확인했다.

그래서 n = 0일때 결과값이 0이라는걸 미리 설정하고 그다음에 else를 걸어서 1이상의 값을 계산하게 만들었다.

다른 풀이를 보니 이번에는 filter와 reduce를 통하여 더 심플하게 적은 것을 보았다.

공부할것이 또 생겼다.

다른코드

1
2
3
func solution(_ n:Int) -> Int {
    return n != 0 ? (1...n).filter{n % $0 == 0}.reduce(0){$0 + $1} : 0
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.