[Java] 자바 알고리즘, "약수의 합"
- 알고리즘 문제/[Java] 알고리즘
- 2019. 2. 12. 20:50
약수의 합
문제 설명
자연수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
제한 사항
n은 0 이상 3000이하인 자연수입니다.
입출력 예
n |
return |
12 |
28 |
5 |
6 |
입출력 예 #1
12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.
입출력 예 #2
5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.
나의 풀이
1 2 3 4 5 6 7 8 9 10 | class Solution { public int solution(int n) { int answer = 0; for(int i =1; i<=n/2; i++){ answer += n%i==0 ? i : 0; } answer +=n; return answer; } } | cs |
약수의 합을 구하는 것은 무조건 for문을 돌려야 한다고 생각하시면 됩니다. 루프변수가 계속 돌면서 값을 증가시키면서 매개변수 n을 나누는 수가 되어 나누어 떨어지면 더하고 안떨어지면 0을 더하는 알고리즘입니다.(혹은 if문 쓰셔도 무방합니다).
단!!!! 자기자신도 자기자신의 약수라는 점은 꼭 잊지 마시길 바랍니다!!!
저기에서 i의 범위로 n의 절반(n/2)까지만 루프를 돌렸는데 혹시 이유를 알고계시다면!!
이미 프로그래밍에 대해서 수학적 마인드는 기본은 되셨다고 말씀드리고 싶습니다.(이는 훈련으로써 습득이 가능하므로 안됬다고 하더라도 반복하다보면 자연스레 얻게되는 마인드적인 생각입니다.) 너무 간단하죠. 예를 들어, 10의 약수를 구하는데 뭐하러 6부터 9까지의 숫자를 10으로 나눌까요? 어차피 안되는거 알고있는데 굳이 할 필요가 없는행동은 애초에 제거하자는 방법입니다.^^
'알고리즘 문제 > [Java] 알고리즘' 카테고리의 다른 글
프로그래머스 연습문제 풀이 : 이상한 문자 만들기 (2) | 2019.03.23 |
---|---|
[Java] 알고리즘, "최대공약수와 최소공배수" (0) | 2019.02.15 |
[Java] 알고리즘, "문자열을 정수로 바꾸기" (1) | 2019.02.11 |
[Java] 알고리즘, 문자열 내림차순으로 배치하기 (0) | 2019.02.10 |
[Java] 알고리즘, "시저 암호" (0) | 2019.02.10 |