[Python]BaekJoon.AC

[Python]백준 BaekJoon.AC 2231 : 분해합(브루트포스 알고리즘)

스뇨잉 2022. 1. 5. 03:29
728x90
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값에서 1씩 빼준 값부터 차례로 계산하려 했는데..

생성자가 여러개인 경우 가장 작은 수를 출력해야 한다는 조건이 있어 불가능함을 깨달았다.

 

각 자리를 더하는 부분에서 sum()을 사용해봤다.

숫자를 string으로 잠시 바꿔주고 map()을 돌려 쪼갠다음 sum()으로 합해줬다.

그리고 정답을 겟했을 땐 quit()으로 종료시켰다.

 

 

N = int(input())

for n in range(1, N):
    test = 0
    test = n + sum(map(int, str(n)))

    if test == N:
        print(n)
        quit()

print(0)

 

 

728x90
728x90