[백준/Python]백준 4637번 셀프넘버

minj-j·2023년 8월 7일
0

CodingTest

목록 보기
7/14

백준 4637번 : 셀프넘버

🐰 풀이 과정

우선 첫 번째 접근은 주어진 양의 정수 n을 10으로 나누고 나누고 하여
어떻게든 숫자를 쪼개려 하였다.
ex) n = 39 이면 n + (n/10) + (n%10) ..

하지만 이렇게 하면 위의 셈법이 적용되지 않는 숫자들이 너무 많았다.

심지어 첫 번째 풀이에서는 1~10000까지의 숫자를 배열에 저장해 두고
배열 내에 있는 숫자들을 하나씩 빼와서 계산하려 하였다.

그러다 찾은 풀이는 1~10000까지의 숫자들을 집합에 넣어두고
셀프 넘버인 숫자들을 구한 후 셀프 넘버들을 1~10000까지의 숫자들의 집합에서 빼는 것이었다.

set() 함수는 집합의 개념이라 합, 차, 곱이 가능하다는 것이 특징이다.

그리고 셀프 넘버가 아닌 숫자들은 숫자를 문자로 치환하여-> str(숫자)
숫자들을 하나하나 떼어내면 셀프 넘버가 아닌 수를 구할 수 있는 식이 나왔다.
각 자리의 숫자합의 결과들은 셀프 넘버 아님으로 not_self_num 집합에 넣어준다.

🐰 풀이 결과

number_set = set(range(1, 10001)) # 문제에서 요구하는 숫자 범위

not_self_num = set() # 셀프 넘버가 아닌 수들을 저장할 집합

for i in range(1, 10001): # 1~10000까지 숫자들을 모두 돌며 셀프넘버가 아닌 수를 구한다.
    for j in str(i): # 숫자를 문자로 치환해 하나하나 떼어낸 후
        i += int(j) # 다시 숫자로 치환해 더한다.
    not_self_num.add(i) # 결과 값은 셀프 넘버가 아니므로 not_self_num에 집어넣는다.

self_num = sorted(number_set - not_self_num) # 집합 함수는 차 집합이 가능하므로 전체 넘버set에서 셀프넘버가 아닌 집합을 빼준다.

for i in self_num:
    print(i)

🐰 알게 된 것

set() 함수

profile
minj-j`s Development diary!

0개의 댓글