푸르미르

[python]4673.셀프넘버 본문

Baekjoon Online Judge

[python]4673.셀프넘버

((•_•)) 2021. 1. 4. 01:26

 10000이하의 셀프넘버를 구하는 문제이다.

소수점을 생각하지 못했고 break를 잘못사용하여 애를 좀 먹었던 문제이다. 

 

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
def d(): #셀프넘버를 출력하는 함수
    selfNumber=[] #셀프넘버를 담는 리스트
    notselfNumber=[] #셀프넘버가 아닌 수를 담는 리스트
        
    for i in range(110001):
        selfNumber.append(i) 
        gen=0
        if i <10:
            gen=i+#생성자가 존재하는 수를 구하여 gen에 보관
            notselfNumber.append(gen) #셀프넘버가 아니므로 셀프넘버가 아닌 수를 담는 리스트에 저장
        elif i <100:
            gen=int(i+i/10+i%10)
            notselfNumber.append(gen)
        elif i <1000:
            gen=int(i+i/100)+int(i%100/10)+int(i%100%10)
            notselfNumber.append(gen)
        elif i <10000:
            gen=int(i+i/1000)+int(i%1000/100)+int(i%1000%100/10)+int(i%1000%100%10)
            notselfNumber.append(gen)
            
    for i in selfNumber: #i= 1부터 10000까지 수
        if i not in sorted(notselfNumber): #notselfNumber리스트에 없는 수=셀프넘버
            print(i) # 셀프넘버 출력
        else:#notselfNumber리스트에 존재하는 수
            continue #다음 i로 넘어가기
       
d() #셀프넘버 출력함수를 실행
 
cs

이 코드에서 10000이하의 셀프넘버를 출력하라 했기 때문에 5번째 줄에서 notselfNumber리스트에는 1부터 10000까지의 수가 생성자가 될 수 있는 수들을 저장했기 때문에 10000이 넘어갈 수 있다. 하지만 걱정하지 않아도 된다. 왜냐하면 21번째에서 selfNumber리스트에 1부터 10000까지의 수만 저장이 되어있기 때문에 10000이하의 셀프넘버만을 출력할 수 있다.

 

www.acmicpc.net/problem/4673

'Baekjoon Online Judge' 카테고리의 다른 글

[python]1157.단어 공부  (0) 2021.01.04
[python]1065.한수  (0) 2021.01.04
[python]15596.정수 N개의 합  (0) 2021.01.02
[python]4344.평균은 넘겠지  (0) 2021.01.02
[python]3052.나머지  (2) 2021.01.01