[백준] 4673번: 셀프 넘버

Rmi_Kim·2021년 6월 17일
0

백준

목록 보기
3/5
post-thumbnail

📍 문제

💡 접근

1 부터 10000까지 검사한 뒤, 해당 수를 생성자로 하는 수가 있으면 그 수를 거르는 방법으로 문제를 해결하였다. 함수 부분의 반복문에서 다른 사람의 코드를 참고하였다.

* 구조
1. 1부터 10000까지 반복문을 돌면서 d함수에 숫자를 넣고, return 되는 수는 해당 숫자를 생성자로 하는 수가 된다.
2. return 된 수는 생성자가 있는 수, d 함수에 의해 리턴된 수 n 을 boolean 배열의 인덱스로 사용하여 해당 위치를 true 로 바꾸어 준다.
3. boolean 배열에서 false 인 원소의 위치(인덱스)를 출력한다.

👩‍💻 코드

public class Main {
	public static void main(String[] args) {
 
		boolean[] check = new boolean[10001];	// 1부터 10000이므로
 
		for (int i = 1; i < 10001; i++){
			int n = d(i);
		
			if(n < 10001){	// 10000 이하의 수만 필요
				check[n] = true;
			}
		}
 
		StringBuilder sb = new StringBuilder();
        
		for (int i = 1; i < 10001; i++) {
			if (!check[i]) {	// false 만 출력
				sb.append(i).append('\n');
			}
		}
		System.out.println(sb);
	}
 
 
 
	public static int d(int number){
		int sum = number;
    
		while(number != 0){
			sum = sum + (number % 10); // 첫 째 자리수
			number = number/10;	// 10을 나누어 첫 째 자리를 없앤다
		}
    
		return sum;
	}
}    

🔗 링크

https://www.acmicpc.net/problem/4673
참고 : https://st-lab.tistory.com/53

profile
기록하는 개발자

0개의 댓글

관련 채용 정보