Notice
Recent Posts
Recent Comments
Link
개발 공부~
[ 백준 - 4673] 셀프 넘버 .java 본문
https://www.acmicpc.net/problem/4673
셀프 넘버
양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수로 만들 수 없는 수
또한 만들어진 수에서 이어서 다음 수를 만들 수 있다 -> 범위가 초과될 때까지 계속 만들기
=> 셀프넘버인지 판별하는 배열 생성, 다 참으로 시작
=> 하나의 숫자에서 생성가능한 모든 수를 구함 -> 연속성
=> 함수를 따로 구현 -> 1의 자리수부터 n의 값을 갱신하여 구함
import java.util.*;
public class Main{
final static int max = 10000;
public static int d(int num){
int answer = num;
while(num>0){
answer += num%10;
num /= 10;
}
return answer;
}
public static void main(String[] args) {
//셀프넘버인지 판별하는 배열
boolean[] isSelf = new boolean[max+1];
Arrays.fill(isSelf, true);//다 참으로 시작
for(int i =1; i<=max; i++){//하나의 숫자에서 생성가능한 모든 수를 구함
int mid = i;
while(true){
int num = d(mid);
if(num>10000) break;//결과가 범위를 넘어가면 while문 끝
//이어서 계속 생성 가능
isSelf[num] = false;
//이어서 구하는 값 갱신
mid = num;
}
}
for(int i = 1; i<=max; i++){
if(isSelf[i]) System.out.println(i);
}
}
}
연속성이 중요했던 문제이다
'코딩테스트 > 백준' 카테고리의 다른 글
[백준 - 10814] 나이순 정렬 .java (1) | 2025.05.08 |
---|---|
[백준-1110] 더하기 사이클 .java (0) | 2025.05.07 |
[백준 - 1120] 문자열 .java (0) | 2025.05.06 |
[백준 - 2817] ALPS식 투표 .java (0) | 2025.05.06 |
[백준 - 2840] 행운의 바퀴 .java (0) | 2025.05.06 |