Algorism

알고리즘 - 프로그래머스 약수의 합 (Swift)

codinglearn 2020. 7. 2. 10:28
반응형

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.제한 사항

  • n은 0 이상 3000이하인 정수입니다

약수의 합 구하는 공식은 간단합니다.

 

1 부터 n까지의 값들중 나누어서 나머지가 0이 되는값이 약수입니다.

추가로 n의 약수는 n의 제곱근 보다 클 수가 없기 때문에 이 값까지 나누어서 더해주면 됩니다.

(코드상에서는 n/2의 절반 값으로 진행 하였습니다.) 

 

n/2까지의 값으로 나누기를 진행 하였기 때문에 n값은 포함되지 않기 때문에 마지막에 추가해줍니다.

func solutionA(_ n:Int) -> Int {
    
    var answer = 0
    
    for a in stride(from: 1, through: n/2, by: 1) {
        if n % a == 0 {
        	// [1, 2, 3, 4, 6]
            answer += a
        }
    }
    
    answer += n
    
    return answer
}

print(solution(12))
// 28

 

고차함수를 사용하여 더욱 간단하게 표현하면 아래와 같습니다.

func solution(_ n:Int) -> Int {
    return Array(1...n/2).filter { n % $0 == 0 }.reduce(0, +) + n
}
반응형