ProblemSolving/Mathematics

백준 4673 셀프 넘버 (파이썬)

OSNIM 2022. 5. 11. 22:49
반응형

수학, 구현, 브루트 포스

 

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

 

 

제출 코드

import sys
print = sys.stdout.write
check = [0] * (10001)
for i in range(1, 10001):
    string = str(i)
    temp = i
    for j in string:
        temp += int(j)

    if temp < 10001:
        check[temp] = 1

for i in range(1, 10001):
    if not check[i]:
        print(f"{i}\n")

 

결과 및 정리

처음에 문제가 단순한 수학 함수여서 쉽게 풀 수 있을 줄 알았습니다. 하지만 10 이하의 셀프넘버 중 2, 4, 6, 8이 안되는 이유를 못찾았습니다. 

그런데 자기 자신과 각 n자리의 자리수의 합이라는 의미를 잘 생각해보니 1자리도 더해야 하는 것이었습니다.

1 + 1 = 2

2 + 2 = 4

...

 

이렇게 막혔던 부분을 해결하니 문제가 바로 보였습니다.

check로 10000 까지 체크

생성자로 생성된 수 = 자기 자신 + 자리수

생성자로 생성된 수는 1로 만들고 나중에 1이 아닌 숫자만 출력

 

 

 

반응형