백준 2231번 - 분해합 (Python3)
코드
이중 while문
n = int(input())
def _generateNum(n):
# 생성자
g = 0
while True:
# 각 자리 수의 합을 담을 변수
tot = 0
g += 1
tmp = g
# n과 g가 같아질 때까지 반복문이 돌았다 => 생성자가 없다
if n == g:
print('0')
break
# tot를 구할 반복문
while True:
tot += tmp % 10
tmp = tmp // 10
if tmp == 0:
break
if n == (g + tot):
print(g)
break
_generateNum(n)
for문
n = int(input())
tot = 0
for i in range(1, n+1):
# i를 str 함수로 문자열로 변환 후 map 함수로 개별적으로 받고 list로 만들어줌
# while 문에서 tot를 구한 반복문과 동일한 역할
tot = list(map(int, str(i)))
g_tot = i + sum(lst)
if g_tot == n:
print(i)
break
if i == n:
print(0)
문제 해설
찾고자 하는 생성자를 담을 변수의 값이 n과 같아지는 경우 생성자가 없는 숫자라는 것을 파악하고 나면 쉽게 풀 수 있다.
각 자리 수의 합을 구하려다보니 반복문을 이중으로 구현하여 시간 복잡도 부분에서 별로 좋지 못한 느낌이 있어 for 문으로도 구현해보았다.
댓글남기기