코딩/백준

[백준] 2231번 분배합 파이썬 풀이 코딩테스트 연습 브루트 포스 브론즈2

thisisjade 2022. 1. 25. 23:16
728x90

문제 출처: 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이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.

자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오.

 

입력

첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다.

 

출력

첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다.

 

예제 입력 1

216

 

예제 출력 1

198

 

문제자체는 쉬웠고 코드를 짧게 하는법을 생각 하였습니다

 

num = int(input())

target = 0

for i in range(1, num+1):
    if i + sum(map(int, list(str(i)))) == num:
        target = i
        break
print(target)

자주 해보지 않은 형식에 스타일로 해보았습니다

str를 통해 각자 자리의 자연수를 list에 넣고 map으로 int로 바꿔준후 sum으로 값을 더해주는 방식을 선택하였습니다

 

존재하지 않을 경우 0이기 때문에 target의 초기값을 0으로 설정해주었습니다

728x90