본문 바로가기

코딩 테스트/백준 파이썬 문제 풀이

[백준 4673번 파이썬] 셀프 넘버

https://www.acmicpc.net/problem/4673

 

이 문제는 매우 복잡해 보이는데.. 실제로도 복잡하다

줄여서 말하자면

만약 11이라는 숫자가 있으면, 이에 대한 문제에 나와 있는 함수는

이 숫자를 가지고 11 + 1 + 1이라는 수식을 진행한다

[ 숫자 + 숫자의 십의 자릿수 + 숫자의 일의 자릿수 ]

숫자가 백의 자릿수, 천의 자릿수까지 있으면 그 숫자까지 더해주면 된다

또한 위 수식의 결과값을 통해 11은 13의 생성자라는 결론이 나오게 되는데,

우리가 이 문제에서 출력해내야 하는 값은 어떤 값의 생성자에도 속하지 않는 숫자들이다

즉, 우리가 출력해야 하는 숫자 중에 11은 존재하지 않는다는 것이다

 

netural = set(range(1,10001))
addnum = set()
for i in range(1, 10001):
    for k in str(i):
        i += int(k)
    addnum.add(i)
num = sorted(netural - addnum)
for j in num:
    print(j)

 

코드도 매우 복잡한데...

우선 1부터 10000까지의 숫자들을 가지고 위의 수식을 진행해

수식 결과값을 1부터 10000까지 들어가 있는 netural 리스트에서 제외해주면(sorted(netural - addnum))

어떤 숫자의 생성자에도 속하지 않는 숫자들만이 남게 되는데, 이를 하나씩 프린트해 주기만 하면 정답이 된다