본문 바로가기
Computer Science/알고리즘

프로그래머스 알고리즘 문제[약수의 합]

by juwon2 2024. 3. 5.

#문제

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

 

# 제한사항 

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

 

# 입출력 예

 

ex)  1)   12의 약수는 1,2,3,4,6,12 이다. 이를 모두더하면 1+2+3+4+6+12 = 28이다

       2)    5의 약수는 1,5 이다.  이를 모두 더하면 1+5 = 6이다 

 

 

 

# 풀이 

class Solution {
    fun solution(n: Int): Int {
        var answer = 0
        
        for (i in 1..n){
            if (n%i == 0){
                answer += i
            }
        }
        
        
        return answer
    }
}

 

예시에서 볼 수 있듯이 약수로 나누면 나머지가 모두 0인 특징을 볼 수 있다

따라서 for문을 통해 1부터 n까지 반복문을 돌다가, 나머지가 0이면 그 값을 계속 더해주도록 코드를 짰다 

 

 

# 다른사람 풀이

class Solution {
    fun solution(n: Int): Int {
        var answer = 0

        answer = (1..n).filter { n % it == 0 }.sum()

        return answer
    }
}

 

filter를 사용해서 풀이하는법!

filter = for문과 if문을 합쳐놓은거라고 생각하면 편할것같다

1부터 n까지 실행하는데, n을 실행되는 값으로 나눴을때 나머지가 0이되는것들을 합쳐서 리턴한다?? 

 

filter에 대해 좀 더 학습해보기!!