깡뇽

[백준] 2231번 분해합 파이썬 본문

Algorithm/BAEKJOON

[백준] 2231번 분해합 파이썬

깡뇽 2022. 3. 4. 16:09
반응형

브루트 포스 유형의 Bronze 문제를 하나 더 풀어보았다.

 

2231번 분해합 풀이

[시도1] 맞았습니다!!

n = int(input())

for i in range(n):
  num = i
  sum = 0
  for j in range(len(str(i))):
    sum += int(str(num)[j])

  if (i + sum) == n:
    result = i
    break

print(result)

입력값 n의 생성자를 구해야 하는데 예를 들어, 245의 분해합은 256(=245+2+4+5)이므로 256의 생성자가 된다.

가장 작은 생성자를 찾거나 생성자가 없으면 0을 출력하면 되기 때문에 0부터 n까지 모든 숫자들이 n의 생성자인지 찾도록 한다. for문을 0부터 n까지 돌리는데 값이 i일 때에 i의 각 자리에 있는 수(int(str(num[j])를 sum에 더한다. 해당 sum에 i까지 더한 수가 n과 같다면 생성자이므로 result에 i를 넣어 반복문을 멈추고 result를 출력한다. 다만 생성자가 없다면 그대로 sum = 0으로 인해 0이 출력된다.

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

 

2231번: 분해합

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

www.acmicpc.net

 

반응형