티스토리 뷰

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

 

나의 풀이

n = int(input())
min = n
flag = 0
for i in range(1,n):
    sum = i
    tmp = i
    while tmp>0:
        sum+=tmp%10
        tmp = tmp//10
    if sum == n:
        flag = 1
        if min>i:
            min = i   

if flag==1:   
    print(min)
else:
    print(0)

 

다른 사람 풀이

n = int(input())
result = 0
for i in range(1,n):
    lst = list(map(int,str(i)))

    result = i+sum(lst)
    if result ==n:
        print(i)
        break;
    if i==n:
        print(0)

 

 

오.. 나는 자릿수를 while문 안에서 10으로 나눠가며 더해줬는데 그럴 필요없이 문자열을 잘라서 정수로 변환한 다음 더해주면 되는군 ..

 

0출력도 i == n일 때 바로 출력하면 되는군 .. 

 

최솟값도 어차피 1부터 시작해서 점점 큰 숫자를 시도하는거니까 나처럼 최솟값 판단할 필요없이 바로 break 문 쓰면 되는구만 ㅠ 

 

이번 문제 무지성 코딩했나보다 ㅋ

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함