알고리즘 & 코딩테스트
[백준] 2231번 분해합
Haksae
2022. 3. 20. 04:06
⛏ 문제 파악
- 가장 작은 생성자를 구하는 문제 (분해합의 생성)
- 브루트 포스 방식으로 풀면 된다.
👉🏻 답안
N = int(input())
number = 1
while True:
if N < number :
number = 0
break
temp = 0
for i in range(len(str(number))):
temp += int(str(number)[i])
if number + temp == N:
break
number += 1
print(number)
📑 간단한 설명
- 자기 전에 빨리 풀려고 그냥 글을 코드로 바로 적어서.. while을 돌리고 안에 for문을 넣어서 진짜 브루트 포스 방식으로 풀었다.
- 다만 너무 비효율적인 것 같아서 다른 답안들을 보니, 생각해보니 굳이 while을 왜 썼지 내가 라는 생각을 했다..
- 좀 더 생각하고 쓰자... :)
👉🏻 다른 분의 답안
n = int(input()) # 분해합을 입력값으로 받음
for i in range(1, n+1): # 해당 분해합의 생성자 찾기
num = sum((map(int, str(i)))) # i의 각 자릿수를 더함
num_sum = i + num # 분해합 = 생성자 + 각 자릿수의 합
# i가 작은 수부터 차례로 들어가므로 처음으로 분해합과 입력값이 같을때가 가장 작은 생성자를 가짐
if num_sum == n:
print(i)
break
if i == n: # 생성자 i와 입력값이 같다는 것은 생성자가 없다는 뜻
print(0)