티스토리 뷰

728x90
반응형

문제

 

www.acmicpc.net/problem/2231

 

2231번: 분해합

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

www.acmicpc.net

 

코드

a = int(input()) # a의 가장 작은 생성자를 구하시오

result = 0
for i in range(a): # 0 부터 a까지 for문 돌음

    result = i # 이전값 출력하기 위해서 저장해둠
    str_i = str(i) # 자릿수를 쉽게 더하기 위해 문자열로 변환
    for j in str_i:
        i += int(j) # ex) i = 198 + 1 + 9 + 8

    if i == a: # i 값이 입력값과 똑같다면
        print(result) # 저장해둔 값 출력
        break
else: # for에서 break가 한번도 안걸렸다면 생성자가 없는거기 떄문에 0출력
    print(0) 
    

 

 

코드설명

a가 주어졌을때 a의 가장 작은 생성자를 출력해야하는 문제이다.

a의 생성자는 a보다 작기 때문에 for문을 a까지 돌려서 생성자를 찾는다.

 

i를 분해합 진행하기위해 i값을 result에 저장한후 분해합을 진행한다.

분해합을 진행한뒤 i가 입력값 a랑 같다면 result에 저장된 값이 생성자이기 때문에 result를 출력해주면 된다.

 

for문이 break에 한번도 안걸렸다면 생성자가 없는경우이기 때문에 0을 출력해준다. 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31