tech.junha.kr

백준 분해합

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

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하다. 문자'열' 데이터 형이기 때문에 각 문자마다 반복하는 것이 가능한가보다.