😁 빅데이터 문제 풀기 & Study/- BAEKJOON 문제

[4673번] 셀프 넘버 / python3 (재도전 후 풀어냈으나...)

또방91 2021. 11. 11. 17:52
728x90

문제 링크: 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

10월 말에 한번 도전했다가 실패한 셀프넘버 문제....

오늘 다시 문제 풀이를 시도했는데

오전에 배운 에라토스테네스의 체가 갑자기 생각나서 True False 미로에 갇혀버리고....

기본적인 것을 놓쳐버리고 만다.


❌ 1~3차시도 실패

여러 번 실패 코드는 보지 않는 게 심신 안정에 좋다....😥

굳이 보고 싶다면 github에 들어가면 되고 정답코드 빠르게 가쟈아☝


❓ 정답은 ??

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
# 1부터 10,000까지 들어있는 base data에서 
# 생성자들을 제거하여 셀프넘버를 빼는 원리는 동일
 
# Keypoint 1
# 생성자가 2개인 아이들이 있기에 여러번 빼려고하면 에러가 생길테니
# 생성자들은 set로 data를 만들어준다.
 
# Keypoint 2
# 각 자리를 10의 각자리 제곱으로 나눠 주어 도출하기 보다는
# str로 만든 다음 하나씩 도출시키는 방법을 이용
 
base=set(range(1,10001))
new=set()
 
for i in range(1,10001):  #1부터 시작하여 생성자data 만들기
    for j in str(i):    #문자열로 바꿔주기
        i += int(j)     #하나씩 나온 str를 int로 바꿔며 더하기
    new.add(i)      #만들어진 생성자를 new data에 추가
    
#셀프넘버 = 기존 - 생성자 / 증가하는 순서로 출력해야하니 정렬    
self= sorted(base - new)
 
#셀프넘버 하나씩 출력
for i in self:
    print(i)
cs

💯 풀이 과정

# Keypoint 1

: 생성자가 2개인 아이들이 있기에 여러번 빼려고하면 에러가 생길테니, 생성자들은 set로 data를 만들어준다.

 

# Keypoint 2

: 각 자리를 10의 각자리 제곱으로 나눠 주어 도출하기 보다는

(여기서.... 완전 잘못해석해서 실패 수순을 밟았었다..)

str로 만든 다음 하나씩 도출시키는 방법을 이용한다.


😎오늘의 한줄평: ㅠㅠㅠㅠㅠㅠ 배운 거 써먹으려 노력하는 건 좋은데 문제 읽고 적합한 걸 찾자

728x90