티스토리 뷰

알고리즘/백준

[백준] 4673번 셀프 넘버

머어하지 2018. 12. 7. 23:03

생각

Github - https://github.com/hellojdh/Code/blob/master/src/baekjoon/q1000/Q4673.java 양의 정수 n에대해서 n과 n의 각 자리수를 더하여 새로운 수를 만들 수 있다. 예를들어 33 이면 33+3+3=39, 39+3+9=51.... 이런 식으로 쭉 만들 수 있다. 이런식으로 만들 수 없는 수를 셀프 넘버라고 한다. 10000 이하의 셀프 넘버를 출력하여라.


처음 생각

입력이 주어지지 않고 10000 이하의 셀프 넘버를 구해서 출력 하기만 하면 된다. 셀프 넘버란 위의 조건으로 만들어 지지 않는 수이므로 조건으로 만들어지는 수들을 구해서 그 수들을 제외한 수를 답으로 선택하면된다.

▶ 1~10000까지의 숫자중 답을 내어야하므로 arr[10001]을 생성해 주었다.


다음 생각

반복문을 통해 1부터 10000까지 해당 숫자로 조건에 해당하는 숫자를 만들어준뒤 arr[해당숫자]=1로 이 숫자는 셀프 넘버가 아니라는 표시를 해주었다.

▶ 반복문을 돌 때 이미 arr[i]가 1이라면 이미 거쳐갔던 숫자이므로 이 숫자는 continue를 통해 패스해 주었다.


다다음 생각

조건을 통해 언제까지 숫자가 만들어질지 모르므로 while문을 통해 만들어지는 숫자가 10000을 넘을 때 break를 해주었다.

▶ 10000을 넘어갈 때와 마찬가지로 새로만들어진 숫자의 배열 값이 1인 경우에도 break문을 통해 빠져나와 주었다.


다다다음 생각

1~10000 까지의 숫자들 중 배열 값이 0인 즉, 조건을 통해 만들어 줄 수 없는 수들을 출력하였다.


방안

1) Java 풀이


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package baekjoon.q1000;
 
import java.io.IOException;
 
public class Q4673 {
    public static void main(String args[]) throws IOException {
        int[] arr = new int[10001];
        // 1~10000
        arr[0]=1;
        for(int i=0;i<10001;i++){
            if(arr[i]!=0continue;
            int tn = i;
            // 셀프 넘버가 아닌것 골라주기
            while(true){
                int size = (tn+"").length();
                int t = tn;
                for(int j=0;j<size;j++)
                    tn += (t+"").charAt(j)-'0';
                if(tn>10000 || arr[tn]!=0break;
                arr[tn] = 1;
            }
        }
        // 셀프 넘버 출력
        for(int i=0;i<10001;i++)
            if(arr[i]==0System.out.println(i);
    }
}
 


2) Python 풀이


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
arr = [0 for i in range(10001)]
arr[0= 1
for i in range(10001):
    if arr[i]!=0:
        continue
    t = i
    while True:
        tn = t
        for j in str(t):
            tn += int(j)
        if tn>10000:
            break
        arr[tn]=1
        t = tn
for i in range(10001):
    if arr[i]==0:
        print(i)


'알고리즘 > 백준' 카테고리의 다른 글

[백준] 1978번 소수 찾기  (0) 2018.12.10
[백준] 1476번 날짜 계산  (0) 2018.12.09
[백준] 9095번 1, 2, 3 더하기(DP)  (0) 2018.12.06
[백준] 1463번 1로 만들기  (0) 2018.12.04
[백준] 16637번 괄호 추가하기  (9) 2018.12.02
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday