https://www.acmicpc.net/problem/4673
일단 문제를 읽으면서 셀프 넘버에 대해 약 57퍼정도 이해를 못 했고, 당연히 혼자서 문제를 해결하지도 못했다.
코드만 봐도 이해가 잘 안돼서 ㅜㅜ 설명이 잘 적혀있는 블로그를 열심히 찾았음 😎
참고 링크 2:https://wook-2124.tistory.com/252
1. 해결한 과정
num_list = set(range(1,10001))
rem_list = set()
for num in num_list:
for nu in str(num):
num+=int(nu)
if num <= 10000:
rem_list.add(num)
self_num = num_list - rem_list
for s in sorted(self_num):
print(s)
1) num_list = set(range(1,10001))
self number은 10000보다 작은 수가 나올 것이기 때문에 1부터 10000이 들어있는 set을 생성한다.
여기서 list가 아닌 set을 생성한 이유는 self number가 중복이 나올 수 있는 확률이 있고, 이를 제거해주기 위해서이다.
2) rem_list = set()
위의 설명과 동일하게, 숫자의 중복을 없애기 위해 set()을 생성한다.
3)
for num in num_list:
for nu in str(num):
num+=int(nu)
아까 생성해놓은 num_list에서 값을 하나씩 꺼내온다.
또한 현재는 정수형이기 때문에 각 자리수를 더하기 위해서 문자열로 바꿔준다.
즉, 38 => 38 + 3 + 8 = 49 와 같은 조건을 맞추기 위해
num을 문자열로 바꿔준 후, 반복문으로 더해주는 것
4) self_num = num_list - rem_list
set 자료형은 A집합에서 B집합을 뺄 수 있기 때문에 rem_list를 빼줌으로써 생성자가 없는 숫자들만 남는다.
5)
for s in sorted(self_num):
print(s)
set은 순서가 없는 자료형이다. 따라서 sorted()함수를 이용해 오름차순으로 정렬해준 후, 하나씩 출력한다.
'🔅코딩테스트 공부🔅 > ❗백준' 카테고리의 다른 글
[백준] 11720번 숫자의 합(with python) (0) | 2023.01.20 |
---|---|
[백준] 11654번 아스키 코드(with python) (0) | 2023.01.20 |
[백준] 1065번 한수(with python) (0) | 2023.01.19 |
[백준] 4344번 평균은 넘겠지(with python) (0) | 2023.01.18 |
[백준] 8958번 OX퀴즈(with python) (0) | 2023.01.18 |
댓글