본문 바로가기

코테연습문제

[백준/Python] 2231 분해합

N = int(input())
answer = 0
for i in range(N):
    res = sum(list(map(int, str(i))))
    if res + i == N:
        answer = i
        break

print(answer)

유의했던 사항

1. 가장 작은 생성자를 구해야함 → for문을 0부터 1씩 커지게 해서 돌리고, 처음 나온 값에서 break

 

풀이과정

1. for문으로 1부터 N까지 돌면서 부분합을 구해본다

1-2. 부분합은 i로 부분합을 구하고 그 부분합이 N과 같은지 비교하는 방식으로 구한다

1-3. i를 str으로 해서 각 자릿수를 따로따로 더할 수 있게 만든다

      (res는 각 자릿수를 더한 값→i=198이면 res=1+9+8=18)

2. 부분합이 구해졌으면 i를 출력

 


N = int(input())
flag = False
for i in range(N):
    res = i
    for s in str(i):
        res += int(s)

    if res == N:
        flag = True
        break
    else:
        flag = False

if flag:
    print(i)
else:
    print(0)

처음에 이 방법으로 풀었는데, 결과는 "맞았습니다!"가 뜨긴 한다..

근데 마지막 if문에서 i를 어떻게 알고 출력을 했는지 모르겠다...

일단 풀이 방법은 위 풀이법과 똑같은데 sum(list(map(int, str(i)))) 대신 for문으로 각 자릿수를 더해줬다.

그리고 res에 각 자릿수를 더하기 전에 res = i라고 해줬기 때문에 바로 N과 비교했고, flag를 통해 생성자인지 아닌지 판별할 수 있다.