문제 출처
[문제 요약]
분해합이란 어떤 자연수 N이 있으면 N의 각 자릿수와 N을 더한 값이다.
ex) 어떤 자연수 N이 245라고 하면, N의 분해합은 2+4+5+245 = 256
수식으로 나타내면 N(분해합) = M(생성자) + int(str(M)[0]) + … + int(str(M)[len(M-1)]),
간단하게 아래처럼 된다.
생성자란 분해합을 만드는 수이다. 위에서 말하던 어떤 자연수 N이 생성자다.
생성자는 여러개가 있기도, 없기도 한데
분해합이 입력으로 들어오면 가장 작은 생성자를 출력하는게 목표이다.
생성자가 없으면 0을 출력한다.
[풀이]
분해합은 생성자의 각 자릿수와 생성자를 더하기 때문에 생성자보다 크다.
이 점을 이용해 분해합을 구하는 함수를 간단히 만든다음 룹을 생성자 - 1 만큼 돌리며 하나씩 계산해준다.
[유의할 점]
코드에는 0도 계산하는데 이건 빼도 된다.
[파이썬 3 코드]
# -*- coding: utf-8 -*-
from sys import stdin
def decomp_sum(n: int):
strnum = str(n)
strsum = 0
for i in range(len(strnum)):
strsum += int(strnum[i])
return strsum + n
if __name__ == "__main__":
dsum = int(stdin.readline()) # output의 분해합
m = 0
for i in range(dsum):
if decomp_sum(i) == dsum:
m = i
break
print(m)
[백준] 10773 제로 (Baekjoon Problem 10773: Zero) (0) | 2023.08.17 |
---|---|
[백준] 2292 벌집 (Baekjoon Problem 2292: Honeycomb) (0) | 2023.08.16 |
[백준] 11866 요세푸스 문제 0 (Baekjoon Problem 11866: Josephus problem 0) (0) | 2023.08.14 |
[백준] 1654 랜선 자르기 (Baekjoon Problem 1654: Cut LAN Cable) (0) | 2023.07.21 |
[백준] 1676 팩토리얼 0의 개수 (Baekjoon Problem 1676: Count trailing 0's in factorial n) (0) | 2023.06.12 |
댓글 영역