공부 기록장

[백준 - Python] 2231. 분해합 (완전 탐색) 본문

코딩 테스트/백준 문제 풀이

[백준 - Python] 2231. 분해합 (완전 탐색)

빛나무 2024. 1. 27. 10:54

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())
result = 0
for num in range(1, 1000001):
    gen = num
    nn = num
    while nn > 0:
        x = nn % 10
        nn //= 10
        gen += x

    if gen == n:
        result = num
        break

print(result)

 

처음의 풀이는 위와 같이

각 자리 수의 합을 구하는 과정을

반복문을 또 돌면서, 한 자리씩 떼어주는 과정을 거쳤다.

 

다른 분들의 코드를 살펴보다가

자리 수의 합을 구하는 코드가 간결화 된 코드가 있었고

기억해두면 유용할 것 같다.

 

n = int(input())

result = 0
for i in range(1, n+1):
    num = sum(map(int, str(i))) + i
    if num == n:
        result = i
        break

print(result)

 

정수를 문자열로 변환하여 iterable 객체로 만들고

map함수를 이용해 iterable의 각 요소를 정수로 형 변환하여

sum 함수로 간단하게 자리 수를 더해줄 수 있다.