백준 분해합
https://www.acmicpc.net/problem/2231
나의 풀이
N = int(input())
total = 1000000
for i in range(N):
arr =[]
org = i
while(i!=0):
arr.append(i%10)
i //=10
if sum(arr)+org == N:
total=org
break;
if total == 1000000:
print(0)
else:
print(total)
상대방 풀이
n = int(input())
result = 0
for i in range(1, n+1):
num_list = list(map(int, str(i)))
result = i + sum(num_list)
if result == n:
print(i)
break
if i == n:
print(0)
자리수 분해에 관한 코드
나는 10을 나눠 나머지를 리스트에 저장했고
상대는 num_list = list(map(int, str(i)))를 이용했다.
str(i): 문자열로 숫자를 바꾸고, map(int, str(i)): 그걸 자리수마다 int로 바꾸고, list(map(int, str(i))): 그 값을 리스트에 저장했다.
후에 마지막에 발견했지만 어차피 작은 수 부터 분해합을 찾는 거라면, 찾기만하면 끝나면 되기 때문에for문을 중간에 break해도 무방하다.
num_list = list(map(int, str(i)))이 어떻게 가능하지?
n = 12345
a = str(n)
print(a)
# 12345
b = list(n)
print(b)
#'int' object is not iterable
c = list(str(n))
print(c)
# ['1', '2', '3', '4', '5']
d = list(map(int, str(n)))
print(d)
# [1, 2, 3, 4, 5]
str(n)은 iterable하다. 문자'열' 데이터 형이기 때문에 각 문자마다 반복하는 것이 가능한가보다.