-
프로그래머스 - 약수의 개수와 덧셈 [자바]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; } }
반응형