Computer_Language/Algorithm

[백준] 17618번 신기한 수 파이썬 해설 (Python)

Joo-Topia 2019. 10. 28. 12:54

출처 : https://www.acmicpc.net/problem/17618

 

17618번: 신기한 수

평소에 수에 대한 관심이 많은 아이인 민철이는 오늘도 노트에 연필로 수를 더하거나 빼거나 곱하거나 나눠보면서 시간을 보내고 있다. 그러다가 18이라는 수는 신기한 성질을 가진다는 것을 알아냈다. 18을 이루는 각 자릿수인 1과 8을 합한 9는 18의 약수가 된다. 민철이는 18과 같이 모든 자릿수의 합으로 나누어지는 수를 여러 개 더 찾아냈는데, 12, 21도 그런 신기한 수였다. 민철이는 이렇게 모든 자릿수의 합으로 나누어지는 수를 “신기한 수”라고 부

www.acmicpc.net

따로 알고리즘이 분류되지 않은 문제이다.

수학으로 분류될 수 있을 것 같다.

 

풀이


파이썬이 아니면 아주 간단하게 풀 수 있는 문제이지만 파이썬은 시간 초과가 발생한다.

아래 코드도 PyPy3 채점기로 통과했지만 Python3 채점기로는 시간초과가 발생한다.

import sys
input=sys.stdin.readline

if __name__ == "__main__":
    ans = 0
    for n in range(1, int(input())+1):
        s = 0
        tmp = n
        while tmp:
            s += tmp%10
            tmp //= 10
        if n%s == 0: ans += 1
    print(ans)

 

자릿수 덧샘을 문제의 조건에 맞춰서 하드 코딩하면 조금 더 빠르게 연산할 수 있지만, 코드의 가시성을 위해 자릿수 덧셈에 사용하는 가장 기본적인 알고리즘으로 문제를 풀었다.

글을 쓰다가 생각난 것인데, 문제에서 입력이 많이 주어지는 경우가 아니면 굳이 sys를 import해서 사용할 필요가 없다.
(오히려 더 느려지더라!)

 

 

결과 인증


파이썬으로 푸신 분이 딱 한분 계시던데.. 대단한 분이신 것 같다..

단순하게 풀어서 그런지 글이 짧아졌지만 대충 쓴 건 아니다!