[2021-05-25] 약수의 개수와 덧셈
2021. 5. 25. 22:14ㆍ코딩테스트
푼 시간 : 40분
언어 : 자바
https://programmers.co.kr/learn/courses/30/lessons/77884
코딩테스트 연습 - 약수의 개수와 덧셈
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주
programmers.co.kr
재귀함수로 풀다보니 시간이 오래걸렸다
지저분한데 급해서 그냥 풀었다.
막상 남들 푼걸 보니 재귀가 없어도 되는 문제였다...
너무 어렵게 생각하려는 습관이 문제인 것 같다.
후배들 보면서도 하는 생각인데 나도 결국
똑같이 어렵게 연산하는길을 택하는경우가 많은 것 같다..
class Solution {
public int solution(int left, int right) {
int answer = 0;
int[] count=new int[right-left+1];
int temp=left;
int sum;
// 재귀함수에 넣을 약수 개수의 합
int count_sum;
// 재귀함수에 넣을 약수 카운터
for(int i=0; i<count.length; i++){
count_sum=1;
// 약수는 1부터
sum=0;
count[i]=cal(left+i, sum, count_sum);
// 약수 개수를 넣을 카운트, cal함수로 숫자하나당 재귀함수를 연출시킴
}
for(int i=0; i<count.length; i++){
if(count[i]%2==1){
answer+=temp;
temp++;
// 짝수면 더하기(count[i]가 0부터라서)
}
else{
answer-=temp;
// 홀수면 빼기
temp++;
}
}
return answer;
}
public int cal(int n,int sum, int count){
if(n==count)
// count가 left의 값과 같아지면 끝낸다.
return sum;
else if(n%count==0)
// 카운트가 n(left)의 값의 약수일경우 sum을 더하며 리턴
return cal(n, ++sum, ++count);
else
// 약수가 아닐경우 그냥 더한다.
return cal(n, sum, ++count);
}
}
'코딩테스트' 카테고리의 다른 글
[2021-05-28] 폰켓몬 (0) | 2021.05.28 |
---|---|
[2021-05-27] 두 개 뽑아서 더하기 (0) | 2021.05.27 |
[2021-05-05] 소수 찾기 (0) | 2021.05.05 |
[2021-05-03] 음양 더하기 (0) | 2021.05.03 |
[2021-05-01] 모의고사 (0) | 2021.05.01 |