Level. 1
문제
정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해 주세요.
풀이
class Solution {
public int solution(int n) {
int answer = 0;
int min = n;
if(n==1) return 1;
for(int i=1; i<=n/2; i++){
if(i==min) break;
if(n%i==0){
min = n/i;
if(min == i){
answer += min;
break;
}
answer += min + i;
}
}
return answer;
}
}
해결방법
1. n이 1일 경우 약수가 1 뿐이므로 1을 return 한다.
2. 반복문을 n/2까지 돌린다.
3. i가 min(n을 i로 나눈 수)과 같을 경우, 해당 약수는 이미 구한 값이므로 반복문에서 빠져나온다.
4. n이 i로 나눠질경우
4-1) i와 min은 n의 약수이므로 answer에 두 수를 더한다.
4-2) min과 i가 동일하다면 i는 n의 제곱근이며, 약수 구하기를 종료하고 반복문에서 빠져나온다.
다른 풀이
class SumDivisor {
public int sumDivisor(int num) {
int answer = 0;
for(int i =1 ; i<=num/2;i++){
if(num%i==0){
answer+=i;
}
}
return answer+num;
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
public static void main(String[] args) {
SumDivisor c = new SumDivisor();
System.out.println(c.sumDivisor(12));
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/12928?language=java#
'Algorithm > Programers - Java' 카테고리의 다른 글
[프로그래머스(Java)] 소수찾기 (0) | 2023.07.04 |
---|---|
[프로그래머스(Java)] 문자열 다루기 기본 / isDigit(), parseInt() (0) | 2023.07.02 |
[프로그래머스] 자연수 뒤집어 배열로 만들기 / valueOf,() toString() (0) | 2023.06.25 |
[프로그래머스] 제일 작은 수 제거하기 / Stream (0) | 2023.05.14 |
[프로그래머스] 문자열 내 p와 y의 개수 / Stream , chars() , filter() (0) | 2023.05.06 |