코딩테스트/백준
[Python] 백준 2231. 분해합
jungmin.park
2023. 11. 23. 10:06
https://www.acmicpc.net/problem/2231
문제 설명:
216이 주어졌을때 198 -> 198 + 1 + 9 + 8 로 216을 만들 수 있다.
이 역시 1부터 216이 될 때까지 계속 for문을 돌면서 찾아 볼 수 있다.
문제 설계
- 루프를 돌면서 i가 10 이상이면 몫과 나머지를 구해 각 자릿수의 합을 구한다.
- ex) 23 일때 2+3을 구한다.
- 만약 각 자릿수의 합과 입력받은 N의 값이 같으면 종료한다.
import sys
input = sys.stdin.readline
n = int(input())
result = 0
for i in range(1, n+1):
cons = 0
#루프를 돌면서 i가 10 이상이면
if i >= 10:
num = i
# 몫과 나머지를 구해 각 자릿수의 합을 구한다.
while num > 10:
cons += num % 10
num = num // 10
cons += num
# 만약 각 자릿수의 합과 i의 합이 입력받은 N의 값이 같으면 종료한다.
if (i + cons) == n:
result = i
break
print(result)
하지만
백준은 틀린이유를 알려주지 않아 난감하다. 다만 코드 중 신경쓰이는 부분은
#루프를 돌면서 i가 10 이상이면
if i >= 10:
num = i
# 몫과 나머지를 구해 각 자릿수의 합을 구한다.
while num > 10:
cons += num % 10
num = num // 10
cons += num
이 부분을 더 간단히 해볼 수 있을거 같았다.
10이상이 아닌 몫이 0이면 루프를 나오는 방식으로 바꾸었다.
while num != 0:
sum += num % 10
num = num // 10
import sys
input = sys.stdin.readline
n = int(input())
result = 0
for i in range(1, n+1):
num = i;
sum = 0
#각 자릿수의 합을 구한다.
while num != 0:
sum += num % 10
num = num // 10
if (i + sum) == n:
result = i
break
print(result)
저 부분에 문제가 있었던 것 같다.