문제
https://www.acmicpc.net/problem/2231
문제는 위 사이트를 참고해주세요.
풀이
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 |
댓글