[프로그래머스/java] 약수의 합
리트리버J
·2020. 12. 30. 15:06
728x90
정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
간단하다.
for문으로 1부터 ~ n(자기 자신)까지 1씩 올려가며 %연산자로 나누어 떨어지면 그 숫자를 더하면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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;
}
}
|
cs |
<사이트 풀이>
*포인트*
1. num/2 를 통해 for문을 절반으로 줄인다.
*모든 약수는 숫자의 절반 이하이다.*
짝수) 24라고 생각해보자. 약수에 2가 포함되므로 12의 약수를 구하면 된다!
홀수) 25이라고 생각해보자. 약수에 2가 포함되진 않지만 2를 나누면 12.5 → 12( int )가 되는데,
어차피 약수라 해봤자, 1, 5, 25일것이다. 12까지 가지 않는다.
99도 마찬가지.
1, 3, 9, 11, 33 으로 자기자신 99를 제외하고 모든 약수가 99/2 = 44.5 이하가 된다.
다른 모든 홀수도, 짝수도 마찬가지이다.
2. 마지막에 num을 더한다.( 자기 자신도 약수에 포함되므로 )
1
2
3
4
5
6
7
8
9
10
|
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;
}
|
cs |
ㅈ
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
728x90
'알고리즘 > 코딩테스트' 카테고리의 다른 글
[프로그래머스/java] 문자열을 정수로 바꾸기 (0) | 2021.01.03 |
---|---|
[프로그래머스/java] 시저 암호 (0) | 2021.01.03 |
[프로그래머스/java]이상한 문자 만들기 (0) | 2020.12.30 |
[프로그래머스/java] 자릿수 더하기 (0) | 2020.12.29 |
[프로그래머스/java] 자연수 뒤집어 배열로 만들기 (0) | 2020.12.27 |