설명
두 정수 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;
}
}
'Algorithm' 카테고리의 다른 글
[Algorithm] 소수 찾기_시간복잡도 O(√N)으로 해결하기. (0) | 2021.08.19 |
---|---|
[Algorithm] 프로그래머스_실패율_2019 KAKAO BLIND RECRUITMENT (0) | 2021.08.15 |
[Algorithm] 프로그래머스_예산 (0) | 2021.08.13 |
[Algorithm] 프로그래머스_완주하지 못한 선수(해시) (0) | 2021.08.12 |
[Algorithm] 특정값 소수 판별하기 (0) | 2021.08.11 |