Algorithms/- 프로그래머스
프로그래머스 - 약수의 개수와 덧셈 [자바]
자굿
2022. 1. 31. 01:47
- 문제 링크 : 약수의 개수와 덧셈
코딩테스트 연습 - 약수의 개수와 덧셈
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주
programmers.co.kr
정답
import java.util.*;
class Solution {
public int solution(int left, int right) {
int answer = 0;
/*
left 부터 right 까지
약수의 개수가 짝수 + : true
약수의 개수 홀수 - : false
*/
for(int i=left; i<=right; i++){
if(divisor(i)){
answer += i;
}else{
answer -= i;
}
}
return answer;
}
private boolean divisor(int num){
boolean even = true;
List<Integer> numList = new ArrayList<>();
//약수
for(int i=1; i<=num; i++){
if(num % i == 0){
numList.add(i);
}
}
if(numList.size() % 2 != 0){
even = false;
}
return even;
}
}
분석
- 단순 약수의 개수를 구하는 함수를 만든 후 +, -만 해주면 됨
참고할 만한 정답
- 수학의 원리를 적용
- 제곱수인 경우 약수가 홀수인 특징을 이용(수학적 배경지식이 있어야 작성할 수 있다.)
class Solution {
public int solution(int left, int right) {
int answer = 0;
for (int i=left;i<=right;i++) {
//제곱수인 경우 약수의 개수가 홀수
if (i % Math.sqrt(i) == 0) {
answer -= i;
}
//제곱수가 아닌 경우 약수의 개수가 짝수
else {
answer += i;
}
}
return answer;
}
}
반응형