https://school.programmers.co.kr/learn/courses/30/lessons/12928
문제
- 정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
제한사항
- n은 0 이상 3000이하인 정수입니다.
입출력 예제
설계과정
1. 약수를 구한다.
2. 구한 약수들을 전부 더한다.
풀이과정
1. Math.sqrt() 를 사용해서 시간 복잡도를 낮춘 for문을 작성한다.
- Math.sqrt() : 제곱근을 구하는 함수이다.
- 약수의 모든 경우의 수를 구하면 값이 클수록 시간이 오래 걸리므로 제곱근을 통해 시간을 줄인다.
2. N % i 가 나누어 떨어지면 약수이다.
3. 약수 중에서 제곱근일 경우에는 answer에 i를 더한다.
- 자기 자신(i)을 결과에 더한다.
4. 약수 중에서 제곱근이 아닐 경우에는 answer에 i와 N을 i로 나눈 몫을 더한다.
- 4로 예를 들면 i를 통해 1이 더해지고, N / i를 통해 4가 더해져서 answer의 결과는 5가 된다.
답안소스
- 프로그래머스
class Solution {
public int solution(int n) {
int answer = 0;
for(int i=1; i<=Math.sqrt(n); i++) {
if(n % i == 0) {
if(i * i == n) {
answer += i;
} else {
answer += i;
answer += n / i;
}
}
}
return answer;
}
}
- 이클립스
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Measure {
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int answer = 0;
for(int i=1; i<=Math.sqrt(N); i++) {
if(N % i == 0) {
if(i * i == N) {
answer += i;
} else {
answer += i;
answer += N/i;
}
}
}
System.out.println(answer);
} catch (IOException e) {
e.printStackTrace();
}
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스]Lv.3 최고의 집합 (0) | 2023.03.30 |
---|---|
[프로그래머스]Lv.3 네트워크 (0) | 2023.03.29 |
[프로그래머스]Lv.1 가운데 글자 가져오기 (0) | 2023.03.16 |
[프로그래머스]Lv.1 2016년 (0) | 2023.03.16 |
[프로그래머스]Lv.1 폰켓몬 (0) | 2023.03.10 |