728x90

문제
정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
- 출력 예시 -

정답 코드
< 내 정답 코드 >
// 모든 범위의 값을 확인하기 (비효율적)
class Solution {
public int solution(int n) {
int sum = 0;
for (int i = 1; i <= n; i++) {
if (n % i == 0) {
sum += i;
}
}
return sum;
}
}
< 타인 답변 코드 >
// 특정 범위의 값만 확인하기 (효율적)
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;
}
}
이것을 주의하자!
- 더 효율적인 코드 작성을 위해선 '약수' 의 특징을 알아야 한다. 본래의 값을 제외하곤 약수는 해당 수의 / 2 영역을 넘지 않는다. 예를 들어, 12의 약수는 [ 1, 2, 3, 4, 6, 12 ] 이다. 40의 약수는 [ 1, 2, 4, 5, 8, 10, 20, 40 ] 이다. 그래서 특정한 수에 2를 나눈 값까지만 확인해보면 된다.
'코딩 테스트' 카테고리의 다른 글
| [프로그래머스] (Lv.1) 문자열을 정수로 바꾸기 * (0) | 2022.08.31 |
|---|---|
| [프로그래머스] (Lv.1) 시저 암호 ** (0) | 2022.08.31 |
| [프로그래머스] (Lv.1) 이상한 문자 만들기 *** (0) | 2022.08.31 |
| [프로그래머스] (Lv.1) 자릿수 더하기 (0) | 2022.08.31 |
| [프로그래머스] (Lv.1) 자연수 뒤집어 배열로 만들기 (0) | 2022.08.31 |