코딩일지/python 백준 알고리즘

python 백준 알고리즘 4673번: 셀프 넘버

야언 2022. 9. 6. 18:45

 

풀이

 

전체 1~10,000까지의 수에서

생성자를 구하는 식 을 사용해 생성자 리스트에 추가한 뒤(append)

for n in str(num):    ### ex) 280
	num += int(n)    ### num = 280 + int('280[0]') + int('280[1]') + int('280[2]') = 280 + 2 + 8 + 0

 

전체 수에서 생성자 리스트를 빼는 형식으로 셀프 넘버를 구한다.

 

 

내 제출

numbers = set(range(1,10_001))   ### 1~10000까지
ganarated_num_list=[]    ### 생성자 리스트
for num in numbers:
    for n in str(num):    ### ex) 63
        num += int(n)    ###  num = num + int(n[0]) + int(n[1])  ex) 63+6+3
    if num <= 10_000:   ### num이 numbers 한계인 10000보다 크면 안되니까 
        ganarated_num_list.append(num)    ### 생성자 리스트에 추가
for genarated_num in set(ganarated_num_list):    ### set으로 중복 걸러내기
    numbers.remove(genarated_num)    ### 생성자 빼버리기
for self_num in numbers:
    print(self_num)

 

 

 

p.s. 구글링을 통해 찾아본 풀이중에 set에서 사용할 수 있는 add, '-' 연산자를 이용한 차집합, sorted 함수를 활용한 풀이가 깔끔했기에 첨부한다.

numbers = set(range(1, 10000))
remove_set = set()  # 생성자가 있는(지워버릴) 숫자 set
for num in numbers :
    for n in str(num):
        num += int(n)
    remove_set.add(num)  # add: 집합에 요소를 추가할 때

self_numbers = numbers - remove_set  # set의 '-' 연산자로 차집합을 구함
for self_num in sorted(self_numbers):  # sorted 함수로 정렬
    print(self_num)

 

 

핵심인 풀이 부분은 제대로 풀어냈지만 아직도 for문, append, remove등 함수활용에 어려움을 느끼는중이다. 복습 필수!