백준 문제풀이/함수

4673. 셀프넘버

뮤츠 2022. 9. 13. 01:50

문제가 다소 어렵게 느껴질 수도 있지만, 결국 각 숫자의 자릿수를 추출하는 방법만 능숙하다면 크게 어렵지는 않은 문제.

생성자를 구하는 것은 어렵지만, 생성자인 n을 알때 d(n)을 구하는 것은 매우 쉽다. 따라서 범위 안의 d(n)값을 모두 구해준 뒤, 해당되지 않는 수를 셀프넘버로 간주하고 출력하면 끝.

 

이 문제를 풀 당시에 배움이 부족하여, ArrayList나 Boolean을 이용해 훨씬 더 깔끔한 코딩으로 풀 수 있었던 것을

말 그대로 '풀수만 있는' 코드로 풀었다는걸 느낄 수 있었다. 지금 나보고 풀라고 한다면, 10000 이내의 숫자에서 1에서부터 출발하는 d(n)의 ArrayList를 만들고, 10000까지의 Boolean 배열을 만들어서, ArrayList에 없는 값들은 false 처리한 뒤 출력했으면 편했을텐데, 내 풀이는 d(n)의 배열들을 한번씩 계속 구해주는 바보같은 코딩을 했다. 하지만 나중에라도 알았으면 됐지!

 

public class Main {
	
	public static int d(int n) {
		
		int result = n;
		while (n!=0) {
			
			result = result + n%10;
			n = n/10;
			
		}
		
		return result;
		
	}
	
	public static void main(String[] args) {
		
		int[] dn = new int[10000];
		boolean sn = true;
		
		for (int i=1; i<=10000; i++) {
			
			sn = true;
			
			for (int j=0; j<10000; j++) {
				
				dn[j] = d(j+1);
							
			}
			
			for (int k=0; k<10000; k++) {
				
				if (i == dn[k]) {
					
					sn = false;
					
				}
				
			}
			
			if (sn == true) {
				
				System.out.println(i);
				
			}
			
		}
		

	}

}

'백준 문제풀이 > 함수' 카테고리의 다른 글

1065. 한수  (0) 2022.09.13
15596. 정수 N개의 합  (0) 2022.09.13