[BOJ 4673]셀프 넘버_파이썬

Gooder·2021년 4월 13일
0

알고리즘_문제풀기

목록 보기
1/25

1. 문제링크

문제 링크

2. 풀이 전 계획 및 생각

문제에서 수열을 만들 수 있다고 주어져있어서, 각 숫자를 초항으로 해서 만들 수 있는 숫자들을 전부 제외해주는 방식으로 문제를 풀었다. 10000보다 작거나 같은 숫자만 봐주면 되는 문제였기 때문에 크기가 10001짜리인 배열의 생성하고 초기값으로 True를 설정해줬다.
n, d(n),d(d(n)),... 과 같이 문제에서 주어져있어서 재귀 함수를 이용해서 구현할 계획을 세웠다.

3. 풀이

num = [True]*10001

def d(n):
    temp = n
    ans = n
    while temp>0:
        ans += temp%10
        temp //= 10
    if ans > 10000:
        return
    num[ans] = 0
    d(ans)

for i in range(1,10001):
    if num[i] == True:
        d(i)
for i in range(1,10001):
    if num[i] == True:
        print(i)

4. 풀이하면서 막혔던 점과 고민했던 점

이번 문제는 딱히 없었던 것 같다. 주어진 조건에 맞춰서 구현했더니 쉽게 풀렸다.

5. 풀이 후 알게된 개념과 소감

이번 문제에서 사용한 10001짜리 배열을 미리 생성하고 그를 이용해서 연산횟수를 줄이는 아이디어는 앞으로 많이 쓰일 것 같기때문에, 잘 알아두고 생각해보는 연습을 하는 것이 중요할 것 같다.

profile
세상을 변화시킬 신스틸러 서비스를 만들고싶은 개발자 Gooder 입니다.

0개의 댓글