본문 바로가기
프로그래밍/알고리즘

백준 셀프넘버(4673) 문제

by 개발하는군인 2020. 3. 28.

문제 : 셀프넘버 

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

 

 

 

양의정수 n에 대해서 d(n) 을 n과 n의 자리수를 더하는 함수라고 정의

 

ex ) d(75) = 75+7+5= 87  

 

양의정수 n이 주어졌을때 이수를 시작해서 n,d(n),d(d(n)),d(d(d(n)))......  무한수열을 만들수있다.

 

여기서 n을 d(n)의 생성자라고 한다.   그리고 생성자가 없는 숫자를 셀프넘버라고 한다. 

 

10000보다 작거나 같은 셀프넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

 

 

 

 

KEYPOINT 

 

 

1. 각자리수에 해당되는 숫자를 어떻게 구해서 연산할것인가? 

 

나머지와 나눗셈으로 각 자리에 해당하는 숫자를 구할수있다.

 

EX) 153    -> 153+1+5+3  ->  162

 

sum= 153

153 % 10  = 3    sum = sum+3

153/10  = 15(소수점 절사)

15%10= 5   sum = sum+3+5

15/10 = 1  (소수점 절사)

1%10= 1    sum = sum+3+5+1 

1/10 =  0  (소수점 절사 ) 

 

0 이면 종료하게 구현하면된다.

 

 

 

2. 생성자가 없는 셀프넘버는 어떻게 구할것인가? 

 

FLAG 를 지정하여 확인한다 . 

 

배열 int c[10000]

 

연산되어진 값을 배열의 인덱스로 지정하고  그 배열[index] 의 값을 1로 바꾼다.

 

d(153) -> 162 

 

배열[162]=1;

 

 

 

 

 

답안