본문 바로가기

프로그래머스 코딩(자바)/Level 1

Programmers Level 1 - 약수의 합

728x90

문제 설명

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
제한 사항
  • n은 0 이상 3000이하인 정수입니다.
입출력 예
n result
12 28
5 6

입출력 예 설명

입출력 예 #1
12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.

 

입출력 예 #2
5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.

 

1
2
3
4
5
6
7
class Solution {
    int solution(int n) {
        int answer = 0;
        for(int i=1;i<=n;i++if(n%i==0) answer += i;
        return answer;
    }
}
cs

 

  약수는 1~n사이에 있다.
  1부터 n까지 숫자를 증가 시키면서 나누어 떨어지면 약수이다.

 

또 다른 풀이  

1
2
3
4
5
6
7
class Solution {
    public int solution(int n) {
        int answer = n;
        for(int i=1;i<=n/2;i++if(n%i==0) answer += i;
        return answer;
    }
}
cs

 

  반복문의 반복 횟수를 절반으로 줄였다.

  n/2 을 넘어가는 수는 n으로 나누어 떨어지는 경우는 1가지 밖에 없다!!! 자기 자신이다.

  그래서 누적 변수의 초기값을 n으로 주고 반복문을 n/2까지만 반복하였다.

 

1
2
3
4
5
6
import java.util.stream.IntStream;
class Solution {
    public int solution(int n) {
        return IntStream.rangeClosed(1, n).filter(v->n%v==0).sum();
    }
}
cs

 

  스트림을 이용하여 풀었다.

  IntStream.rangeClosed()메서드로 1~n까지의 스트림을 만들고
  
  filter()로 약수만을 걸러서

  sum()으로 합계를 구했다.

 

 

728x90