Algorithm

[Algorithm] 프로그래머스_약수의 개수와 덧셈

cornarong 2021. 8. 13. 17:24

설명

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

 

제한사항

  • 1 ≤ left  right ≤ 1,000

 

예시 입력 / 출력

left right result
13 17 43
24 27 52

 

 

 

풀이 과정

 

1. 2중 for문으로 바깥은 i는 left부터 right까지 반복문으로 돌리고 안으로는 1부터 i값까지 1씩 증가 시키면서 나머지 값이 '0'일 경우(약수 성립) HashMap에 해당 i를 key로 getOrDefault을 사용하여 1씩 증가 시켜준다.

 

2. 위의 반복문을 모두 나오면 HashMap의 key는 left부터 right까지의 양수들이 되고, value는 해당 양수(key)의 약수 갯수가 된다.

 

3. 완성된 HashMap의 요소를 반복문으로 전부 호출하여 value가 짝수일 경우 answer에 해당 key 자체를 더하고 홀수일 경우 해당 key자체를 뺀다.

 

 

풀이

import java.util.HashMap;
class Solution {
    public int solution(int left, int right) {
        int answer = 0;
        HashMap<Integer,Integer> hash = new HashMap<>();
        for (int i = left; i <= right; i++) {
            for (int j = 1; j <= i ; j++) {
                if(i % j == 0) hash.put(i, hash.getOrDefault(i,0)+1);
            }
        }
        for(int x : hash.keySet()) {
            if(hash.get(x) % 2 == 0){
                answer += x;
            }else{
                answer -= x;
            }
        }
        return answer;
    }
}