>
[문제]
어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다.
어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다.
따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.
자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오.
https://www.acmicpc.net/problem/2231
2231번: 분해합
어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이
www.acmicpc.net
🎨 풀이
💡 전체 코드
n = int(input())
answer = 0
for num in range(1,n):
tmp_list = list(map(int,str(num)))
if sum(tmp_list) + num == n :
answer = num
break
print(answer)
> 핵심 : 자릿수 분리하기
🍦 코드 설명 (실행 순서대로 나열)
# main
n = int(input())
answer = 0
1. n을 입력받는다.
- n : 주어진 수 (n의 생성자를 찾아야함)
* 그 외 변수
- answer : n의 가장 작은 생성자 or 0 이 들어갈 변수
@ for문 (2번~4번)
for num in range(1,n):
tmp_list = list(map(int,str(num)))
if sum(tmp_list) + num == n :
answer = num
break
2. for문을 실행한다. (1부터 n-1까지)
3. num의 자릿수를 각각 분리한 후 tmp_list에 나눠담는다.
- ex) num = 36 => tmp_list=[3,6]
4. 만약 tmp_list의 합계 + num 값이 n과 같다면, answer에 num을 넣은 후 break 한다.
print(answer)
5. answer을 출력한다.

끝~
⭐ 느낀점
> 고생했따! 이 문제는 좀 어려울 것 같았는데 풀려서 기분이 아주 좋다. 처음에는 문제 자체를 이해하지 못해서 좀 헤맬뻔 했으나~~ 잘 극복했다. 아주 잘했다!
'🎲 알고리즘 공부 > 백준' 카테고리의 다른 글
[백준] 10886번 - 0 = not cute / 1 = cute (파이썬) (0) | 2022.08.20 |
---|---|
[백준] 2750번 - 수 정렬하기 (파이썬) (0) | 2022.08.19 |
[백준] 25304번 - 영수증 (파이썬) (0) | 2022.08.15 |
[백준] 3003번 - 킹, 퀸, 룩, 비숍, 나이트, 폰 (파이썬) (0) | 2022.08.14 |
[백준] 10156번 - 과자 (파이썬) (0) | 2022.08.13 |