코테/백준
[백준/JAVA] 9506번: 약수들의 합
imname1am
2023. 3. 28. 11:48
반응형
🔺 문제
9506번: 약수들의 합
어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다. 예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다. n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.
www.acmicpc.net
🔺 코드
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
List<Integer> list = new ArrayList<>();
while(true) {
list.clear(); // 리스트 초기화
int num = Integer.parseInt(br.readLine());
int sum = 0;
if(num == -1) break;
for(int i=1 ; i < num ; i++) {
if(num % i == 0) {
list.add(i);
sum += i;
}
}
if(sum == num) {
int len = list.size();
System.out.print(num + " = ");
for(int i=0 ; i < len -1 ; i++) {
System.out.print(list.get(i) + " + ");
}
System.out.print(list.get(len -1));
System.out.println();
}
else {
System.out.println(num + " is NOT perfect.");
}
}
}
}
코드 분명 제대로 작성했는데 왜 첫 숫자에 대한 결과가 안 나올까..하고 20분 정도 삽질하다가
알고보니 위에 StringTokenizer 쓸 때 쓰려고 남겨뒀던 코드를 안 지워서 그랬던 것임...🤦♀️🤦♀️🤦♀️
그리고 새로 숫자 받을 때마다 리스트랑 sum 값 초기화하기!
🔺 다른 풀이들
[백준 9506번] 약수들의 합(Java 풀이)
백준알고리즘 9506번 : 약수들의 합 주어진 숫자의 완전수 여부에 따라 적합한 문장을 출력해주면 되는 문제이다. 완전수라 함은 숫자 n이 자신을 제외한 모든 약수들의 합과 같은 것을 의미한다.
agility.tistory.com
약수들의 합을 구할 때, 1 ~ Math.sqrt(num)
까지 반복문을 돌리면서 약수를 구하고,
이 값 i가 약수면 리스트에 i
와 num/i
값을 추가하고, sum에도 저 두 값을 추가해주심!
그리고 나중에 num 값도 껴들어갔을테니까 빼주고,
리스트 정렬해서 값 뽑아오심 (Collections.sort()
)
반응형