본문 바로가기
코딩테스트/백준 알고리즘 풀이

[백준 알고리즘/python] 백준 2231번 분해합, 파이썬

by Godgil 2020. 8. 13.

오늘은 백준 알고리즘 2231번 분해합을 풀어보았다. 물론 파이썬을 사용했다.

 

이 문제는 브루트 포스라는 개념을 이용하는 것이다.

 

문제를 보면 그렇게 어렵지는 않다. 항상 그렇지만 이해만 한다면 말이다.

 

 

 

 

 

 #생각 1. 첫줄에 N을 입력으로 받고, 가작 작은 생성자를 구해야한다.

 #생각 2. N이 주어지면, 1씩 빼면서 각각 분해합을 구하고, 가장 작은 분해합을 저장한다.

 #생각 3. 부분합을 구하는 부분은 함수처리 해주면 될 것 같다. 

 

 

 

 

 

 

이렇게 문제를 쪼개어서 코드를 작성했다.

이렇게 해서 완성된 코드는

def dis_sum(N):
    M = str(N)
    result = 0
    for i in M:
        result = result + int(i)
    result = result + N
    return result

N = int(input())

min_N = N
for i in range(N):
    max_N = N-i
    if dis_sum(max_N) == N:
        min_N = min(max_N,min_N)
if min_N == N:
    print("0")
else:
    print(min_N)

 위와 같다.

 

 

 

 

 

 

 

 

 

 

제일 처음에 있는 함수 부분은, 입력된 값의 부분 합을 구하는 과정이다.

 

이후, N을 입력을 받고. N의 범위 내에서 1씩 감소시키면서 부분합인지 아닌지 판별 하고

 

만약 부분합이라고 판별되면, 원래 저장했던 값보다 더 작은 값을 저장한다.

 

이 문제는 그렇게 어렵지 않았다.

출처

https://www.acmicpc.net/problem/2231

 

2231번: 분해합

문제 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+

www.acmicpc.net

 

댓글