Algorithm(알고리즘)/백준
06_백준 _4673 파이썬 셀프 넘버
반응형
처음에 생각없이 풀었을 땐 런타임 에러가 떴다.
10000번이나 for문을 돌면서 리스트에 값을 찾는 for a in list: 에서 생긴 문제인 것 같았다.
더 간단한 리스트나 중복을 확인하는 방법을 찾다가 리스트 간의 뺄셈 연산으로 찾는 방식이 생각나 시도해봤다.
- 먼저 all_num 에 범위에 해당하는 모든 수를 set() 함수로 만들어줬다.
- self 함수가 아닌 값을 set() list 에 저장해 준다
- 모든 숫자 set 에서 self 가 아닌 값 set list 를 빼주었더니
- self_num 만 남게되었다!!!
- for문을 돌면서 모든 값을 차례로 출력해주자
- 리스트가 set형식이라 순서가 없기 때문에 .sorted() 함수로 정렬 해준 뒤 출력했다
- 풀이
all_num = set(range(1, 10001))
not_self_num = set()
self_num = []
def d(n):
sum = n
for i in str(n):
sum += int(i)
not_self_num.add(sum)
return
for i in range(1, 10001):
d(i)
self_num = all_num - not_self_num
for i in sorted(self_num):
print(i)
- 처음 코드
not_self_num = []
def d(n):
sum = n
for i in str(n):
sum += int(i)
not_self_num.append(sum)
if n == 10000:
for i in range(1, n + 1):
if i not in not_self_num:
print(i)
return
n += 1
return d(n)
d(1)
반응형
'Algorithm(알고리즘) > 백준' 카테고리의 다른 글
08_백준 _2941번 파이썬 크로아티아 알파벳 (0) | 2021.06.17 |
---|---|
07_백준 _1157 파이썬 단어 공부 (0) | 2021.06.17 |
05_백준 4344 파이썬 -평균은 넘겠지 (0) | 2021.06.17 |
04_백준 1110번 파이썬 더하기 사이클 (0) | 2021.06.17 |
03_백준 2884번 파이썬 알람시계 (0) | 2021.06.17 |
댓글