반응형
https://www.acmicpc.net/problem/2231
2231번: 분해합
문제 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다. 자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그
www.acmicpc.net

수학적 센스가 있어야 하는 것 같다. 나는 그게 없어서 다른 분의 풀이를 참고했다.
백준 2231. 분해합 문제 풀이
백준 2231. 분해합 문제 풀이 "분해합"이라는 수학용어가 있습니다. 어떤 자연수 N을 N과 각 자릿수를 1의 자리로 하여 합산한 수를 분해합이라고 하는데요. 이를테면 123 이란 숫자의 분해합은 123 + 1 + 2 + 3..
itadventure.tistory.com
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
num = sys.stdin.readline() | |
# 생성자가 존재할 수 있는 숫자인지 확인하기. | |
possible_start = int(num) - (len(num)*9) | |
if possible_start < 0: | |
possible_start = int(num) | |
# 생성자가 존재할 수 있는 숫자인 경우 | |
while possible_start < int(num): | |
# 각 자릿수의 합을 계산한다. | |
each_num_sum = sum([int(i) for i in str(possible_start)]) | |
# 분해합 = 생성자 + 각 자릿수의 합 | |
result = possible_start + each_num_sum | |
# 값이 있으면 해당 생성자를 출력한다. | |
if result == int(num): | |
print(possible_start) | |
break | |
else: | |
# 생성자를 찾을 때까지 값을 더해준다. | |
possible_start += 1 | |
if possible_start == int(num): | |
print(0) |
반응형
'프로그래밍 > 코딩테스트 문제풀이' 카테고리의 다른 글
[Python] 백준 9012. 괄호 (0) | 2020.01.10 |
---|---|
[Python] 백준 1654. 랜선 자르기 (0) | 2020.01.09 |
[Python] 프로그래머스. 징검다리 (Level 4) (0) | 2020.01.07 |
[Python] 프로그래머스. 멀리 뛰기 (Level 3) (0) | 2020.01.06 |
[Python] 백준 14891. 톱니바퀴 (1) | 2020.01.05 |