perry05

[백준] 4673 - 셀프 넘버(JAVA) 본문

문제풀이 기록/JAVA

[백준] 4673 - 셀프 넘버(JAVA)

perry05 2022. 11. 26. 22:19

[백준] 단계별로 풀어보기 - 함수

https://www.acmicpc.net/problem/4673

 

4673번: 셀프 넘버

셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,

www.acmicpc.net

> 문제

 

> 풀이

import java.util.Arrays;

public class Main {

	static Boolean[] selfNumber = new Boolean[10000];
	static int N = 10000;
	
	// n으로 만들 수 있는 d(n)에 false표시 하는 메소드
	static void isSelfNumber(int n) {
		int tmp;
		while(true) {
			tmp = n;
			
			while(tmp > 0) {
				n = n + (tmp % 10);
				tmp = tmp / 10;
			}
			
			if(n>10000) break;
			selfNumber[n-1] = false;
		}
	}
	
	public static void main(String[] args) {
		StringBuilder br = new StringBuilder();
		Arrays.fill(selfNumber, true);
		
		for(int i = 0; i < N; i++) {
			if(selfNumber[i]) {
				isSelfNumber(i+1);
				br.append(i+1).append("\n");
			}
		}
		
		System.out.println(br);
	}
}

너무 복잡하게 생각한 것 같다. 제출 후 다른 사람의 풀이를 보니 1부터 차례로 d(i)만 구해서 d(i)만 표시해주면 더 효율적으로 할 수 있었다.

Comments