백준 4673번 파이썬

Myeongsu·2021년 9월 18일
0

백준

목록 보기
5/15

문제링크: 백준 4673번(셀프넘버)
백준 4673번

처음 코드

l = list(i for i in range(1, 10001))
new_l = []

for i in l:
    num = 0
    for j in str(i):
        num += int(j)
    num += i
    new_l.append(num)

self_num = sorted(set(l) - set(new_l))

for i in self_num:
    print(i)

1~10000까지 for문을 돌려 리스트에 넣어줬다.
그리고 이중 for문을 돌려 각 자리수를 더해 생성자들을 구해주었고 주었고 새로운 리스트에 넣어줬다.
셀프 넘버는 1~10000의 값을 갖는 리스트에서 생성자 리스트를 뺀 나머지이므로 이를 구하기 위해 set으로 변환해 차집합을 구했다.


문제점

굳이 리스트로 값들을 받아줄 필요가 없이 집합 자료형으로 문제를 해결할 수 있다고 생각


수정 코드

num = set(range(1, 10001))
new_num = set()

for i in num:
    for j in str(i):
        i += int(j)
    new_num.add(i)

self_num = sorted(num - new_num)
for i in self_num:
    print(i)

대략적인 풀이 방식은 이전과 동일하고, list를 set으로 변경해줬다.

profile
명수의 개발 공방

0개의 댓글