본문 바로가기
algorithm

[프로그래머스]약수의 개수와 덧셈 - java, python

by skysline 2023. 2. 23.
반응형

`약수의 개수와 덧셈`

문제 설명

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서,

약수의 개수가 짝수인 수는 더하고,

약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

입출력 예


입출력 예 #1

  • 다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.

수                                       약수                                                                                                                 약수의 개수

13 1, 13 2
14 1, 2, 7, 14 4
15 1, 3, 5, 15 4
16 1, 2, 4, 8, 16 5
17 1, 17 2
  • 따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.

입출력 예 #2

  • 다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.

수                           약수                                                                                                                                    약수의 개수

24 1, 2, 3, 4, 6, 8, 12, 24 8
25 1, 5, 25 3
26 1, 2, 13, 26 4
27 1, 3, 9, 27 4
  • 따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.

 

java code

class Solution {
    public int solution(int left, int right) {
        int answer = 0;
        for(int i= left; i <= right; i++ ){
            int cnt = 0;
            for(int j =1; j <= i; j++){
                if(i%j==0){
                    cnt ++;
                }
            }
            if(cnt%2==0){
                answer += i;
            }else answer -= i;
        }
        return answer;
    }
}
  1. left부터 right까지 반복문을 돌면서, 각 숫자의 약수의 개수를 구합니다.
  2. 각 숫자 i에 대해서, j를 1부터 i까지 탐색하면서 ij로 나누었을 때 나머지가 0이 되는 j를 찾습니다. 이렇게 하면 ji의 약수가 됩니다.
  3. 약수의 개수를 세는 변수 cnt를 0으로 초기화한 뒤, ji의 약수인 경우에는 cnt를 1씩 증가시켜줍니다.
  4. 약수의 개수를 모두 구한 뒤, cnt가 짝수인 경우에는 ianswer에 더하고, 홀수인 경우에는 ianswer에서 빼줍니다.

python code

def solution(left, right):
    answer = 0
    for i in range(left,right+1):
        cnt =0
        for j in range(1,i+1):
            if i%j==0:
                cnt +=1
        if cnt%2==0:
            answer +=i
        else:
            answer -=i
    return answer

 

반응형

댓글