728x90
문제
https://www.acmicpc.net/problem/4673
풀이 코드
- d(n)은 생성자가 있는 수 이기때문에 d(n)이 아니라는 것은 생성자가 없는 셀프 넘버라는 뜻이다.
- 1~10000 범위의 d(n)을 구한 다음 d(n)이 아닌 수를 출력한다.
- StringBuilder를 사용하여 한번에 모아 출력함으로써 실행시간 단축.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
boolean[] isSelfNumber = new boolean[10001];
Arrays.fill(isSelfNumber, true);
//1~10000 범위에서 d(n)을 찾는다.
for (int i = 1; i <= 10000; i++) {
int dn = i;
int num = i;
//자리수를 분해해서 더한다.
while(num > 0) {
dn += num%10;
num = num/10;
}
if (dn <= 10000) {
//d(n)은 셀프 넘버가 아니다.
isSelfNumber[dn] = false;
}
}
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= 10000; i++) {
if (isSelfNumber[i]) {
sb.append(i).append("\n");
}
}
System.out.println(sb);
}
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[알고리즘/백준] 1003 피보나치 함수 - 자바(Java), DP (0) | 2021.10.13 |
---|---|
[알고리즘/백준] 14051 퇴사 - 자바(Java), DP, 삼성 SW 역량테스트 기출 (0) | 2021.10.12 |
[알고리즘/백준] 13458 시험 감독 - 자바(Java), 삼성 SW 역량테스트 기출 (0) | 2021.10.10 |
[알고리즘/백준] 18111 마인크래프트 - 자바(Java) (0) | 2021.10.09 |
[알고리즘/백준] 2609 최대 공약수와 최소 공배수 - 자바(Java), 유클리드 호제법 (0) | 2021.10.09 |
댓글