본문 바로가기

알고리즘_파이썬

백준 2231 분해합

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

 

2231번: 분해합

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

www.acmicpc.net

애초에 문제 분류가 bruteforce 있긴 하지만 분해합이라는 것 자체가 숫자의 자리수에 따라서 결정되고 이를 원래의 수에 다시 생성자 수에 더해야 하기에 N수 직전까지 하나씩 탐색하는 방법 밖에 없다. 따라서 1부터 N-1까지 탐색을 하고 탐색하는 수 마다 분해합을 구하고 더한다. 더해진 수가 N과 일치하면 결과로 내놓고 만약 결과가 없다면 0을 출력한다. 이를 코드로 나타내면 다음과 같다

N = int(input())
result = []
for i in range(1,N):
  num = i
  decomposed_sum = 0
  while i > 0:
    decomposed_sum += i%10
    i //= 10
  if (num + decomposed_sum) == N:
    result.append(num)
if result:
  print(min(result))
else:
  print(0)

 

'알고리즘_파이썬' 카테고리의 다른 글

백준 9655 돌 게임  (0) 2024.01.31
백준 2749 피보나치 수3  (1) 2024.01.31
백준 1655 가운데를 말해요  (1) 2024.01.24
백준 1874 스택 수열  (1) 2024.01.23
백준 10876 중복 빼고 정렬하기  (0) 2024.01.20