반응형
수학, 구현, 브루트 포스
문제 : 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이 아닌 숫자만 출력
반응형
'ProblemSolving > Mathematics' 카테고리의 다른 글
백준 2108 통계학 (파이썬) (0) | 2022.06.23 |
---|---|
백준 4948 베르트랑 공준 (파이썬) (0) | 2022.05.23 |
백준 1002 터렛 (파이썬) (0) | 2022.05.22 |
백준 2609 최대공약수와 최소공배수 (파이썬) (0) | 2022.05.12 |
프로그래머스 k진수에서 소수 개수 구하기 (파이썬) (0) | 2022.05.07 |