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'
'Python > online judge' 카테고리의 다른 글
백준 [2798.블랙잭] | Python (0) | 2024.01.29 |
---|---|
백준 [2751.수 정렬하기2] | Python (0) | 2024.01.29 |
백준 [10814.나이순 정렬] | Python (0) | 2024.01.29 |
백준 [11651.좌표 정렬하기2] | Python (0) | 2024.01.29 |
백준 [11650.좌표 정렬하기] | Python (0) | 2024.01.29 |