본문 바로가기
IT/알고리즘

1일 N알고리즘 - #34

by Sungjun_ 2020. 6. 1.

문제

https://www.acmicpc.net/problem/2231

 

2231번: 분해합

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

www.acmicpc.net

문제는 위 사이트를 참고해주세요.

 


풀이

N = int(input())
num = N // 2
ans = 0

def total(n):
    total = n
    while n != 0:
        total += n % 10
        n = n // 10
    return total

while num <= N:
    if total(num) == N:
        ans = num
        break
    num += 1

if ans != 0:
    print(ans)
else:
    print(0)

 

N에 분해합을 구할 값을 넣어줍니다.

num은 N의 분해합을 구하기 위한 변수입니다.

num의 범위를 정확하게 특정하지 못해서 나누기 2한 값으로 했습니다.

ans는 분해합을 저장할 변수입니다.

 

total 함수는 num값이 들어올때마다 분해합을 한 값을 리턴해줍니다.

while문을 사용해 계속 10으로 나누고 그 나머지를 total변수에 더해줍니다.

 

total함수 밖에 있는 while문은 num값을 증가시키면서 total 함수에 num 값을 넣어주고

total함수의 리턴 값이 N과 같으면 ans에 num값을 넣어주고 while문을 종료하고

아니면 num + 1을 하여 다시 while문을 돌려줍니다.

 

마지막 아래 if문은 ans가 0값이 아니면 ans에 저장된 값을 출력하고

아니면 그냥 0을 출력합니다.

 

 

시간을 더 줄일 수 있을꺼 같은데 저는 이게 한계네요 ㅜㅜ

 


결과

결과 화면

 

'IT > 알고리즘' 카테고리의 다른 글

1일 N알고리즘 - #36  (0) 2020.06.06
1일 N알고리즘 - #35  (0) 2020.06.02
1일 N알고리즘 - #33  (0) 2020.06.01
1일 N알고리즘 - #32  (0) 2020.05.31
1일 N알고리즘 - #31  (0) 2020.05.28

댓글