Algorithm(알고리즘)/백준

06_백준 _4673 파이썬 셀프 넘버

고로케 2021. 6. 17.
반응형

처음에 생각없이 풀었을 땐 런타임 에러가 떴다.
10000번이나 for문을 돌면서 리스트에 값을 찾는 for a in list: 에서 생긴 문제인 것 같았다.
더 간단한 리스트나 중복을 확인하는 방법을 찾다가 리스트 간의 뺄셈 연산으로 찾는 방식이 생각나 시도해봤다.

  1. 먼저 all_num 에 범위에 해당하는 모든 수를 set() 함수로 만들어줬다.
  2. self 함수가 아닌 값을 set() list 에 저장해 준다
  3. 모든 숫자 set 에서 self 가 아닌 값 set list 를 빼주었더니
  4. self_num 만 남게되었다!!!
  5. 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)

반응형

댓글