Python/online judge

백준 [2231.분해합] | Python

구름솜:D 2024. 1. 29. 15:17
728x90

✏️ 문제

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

 

2231번: 분해합

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

www.acmicpc.net

 

✏️ 풀이방법

1. digit 리스트에 n의 숫자를 각 자리수로 담는다. ex) 216 [[2,1,6]]

2. 주어진 숫자만큼 반복 실행하며 digit원소의 합과 자기 자신 숫자를 더했을 때 처음 입력한 자연수와 같다면 출력한다.

 

 

📌 코드

n = int(input())

for i in range(0,n+1,+1):
    digit = []
    digit.append(list(map(int,str(i))))
    if n == i + sum(digit[0]):
        print(''.join(str(i) for i in digit[0]))
        break
    if n == i:
        print(0)
        break

 

 

📌 결과

216   #입력
198   #출력

 

 

🤔 시행착오.1

n = int(input())
for i in range(len(n)):
    print(i)
    for i in range(len(n)):
                   ^^^^^^
TypeError: object of type 'int' has no len()

- len()함수는 iterable한 문자열, 리스트, 튜플, 딕셔너리와 같은 객체에서 사용가능

 

 

🤔 시행착오.2

n = int(input())
sep = str(n)
for i in range(len(sep)):
    m = sum(int(sep[i]))
print(m)
    m = sum(int(sep[i]))
        ^^^^^^^^^^^^^^^^
TypeError: 'int' object is not iterable

- sum()함수는 iterable한 문자열, 리스트, 튜플, 딕셔너리와 같은 객체에서 사용가능

 

 

 

🤔 시행착오.3

n = int(input())
digit =[]
i = 0
while True:
    m = n-i
    m_digit = list(map(int,str(m)))
    if sum(m_digit)==i:
        digit.append(m_digit)
    if i == n:
        break
    i+=1

for i in range(len(digit[-1])):
    print(digit[-1][i], end='')

- 런타임에러

 

 

🤔 시행착오.3

n = int(input())
digit =[]
for i in range(len(str(n))):
    digit.append(9)

i = 0
while True:
    m = n-i
    m_digit = list(map(int,str(m)))
    if sum(m_digit)==i:
        digit.append(m_digit)
    if i == sum(digit):
        break
    i+=1
# print(digit)
# print(digit[-1]) #가장 작은 원소
if len(m_digit) == 0:
    print('0')
else:
    for i in range(len(digit[-1])):
        print(digit[-1][i], end='')
TypeError: unsupported operand type(s) for +: 'int' and 'list'