티스토리 뷰
문제 설명
정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
제한 사항
- n은 0 이상 3000이하인 정수입니다.
입출력 예
n return
12 | 28 |
5 | 6 |
- 내 처음 풀이
class Solution {
public static int solution(int n) {
int answer = 0;
for (int i = 1; i <= n; i++){
int r1 = n / i;
if (r1 * i == n) {
answer = answer + i;
}
}
return answer;
}
}
- 약수의 메커니즘이란 무엇일까? 라는 고민으로 시간을 좀 날림. 그 과정에서 2의 N승의 약수의 합은, 2의 N-1승의 약수의 합 + 2의 N승이라는 기괴한 생각까지 하게됨.
- 약수 : 어떤 수로 정수가 나누어떨어지는것, 어떤 수(n)을 또다른 수(i)로 나눴을때의 몫(ri)과, 다시 i를 곱했을 때 결과가 (n)이 나온다면 i는 그 수의 약수라고 할 수 있다. 따라서 위와 같이 코드를 짰다.
* 다시보기
- 내가 푼 코드 더 간단하게 할 수 있는지 확인 (i는 0부터 계속 반복하기 때문에 시간이 많이 걸릴 수 있다. 따라서 i가 약수로 판별됬을 때 ri은 다시 계산하지 않게 하는 코드를 새로 짜보자)
'Algorithm > Algorithm Practice' 카테고리의 다른 글
3. 버블정렬 bubble sort (Java) (0) | 2020.02.25 |
---|---|
1. 시간복잡도 (영리한 프로그래밍을 위한 알고리즘 강좌) (0) | 2020.02.25 |
프로그래머스 -3 가운데 글자 가져오기(Java) (0) | 2020.02.16 |
프로그래머스 -1 문자열 내 p와 y의 개수(Java) (0) | 2020.02.16 |
동적계획법 (Dynamic Programming) (0) | 2020.01.30 |
댓글
최근에 올라온 글
최근에 달린 댓글
TAG
- likelion
- 20200804
- 20200503
- chapter7
- 20200510
- 20200622
- 20200428
- 20200403
- 20200512
- 20200330
- 20200317
- 20200424
- 20200417
- 백준
- chapter8
- 20200420
- 20200423
- 20200624
- 20200504
- 20200421
- 20200319
- 20200415
- 20200425
- 20200406
- 20200413
- 20200429
- 20201204
- 20200427
- 생활코딩리눅스
- 20200502
- Total
- Today
- Yesterday