본문 바로가기
알고리즘 문제 풀이

[백준 17618] 2019 정올 2차 중등부 "신기한 수"

by 다빈치코딩 2024. 3. 5.

목차

    반응형

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

     

    17618번: 신기한 수

    평소에 수에 대한 관심이 많은 아이인 민철이는 오늘도 노트에 연필로 수를 더하거나 빼거나 곱하거나 나눠보면서 시간을 보내고 있다. 그러다가 18이라는 수는 신기한 성질을 가진다는 것을 알

    www.acmicpc.net

    이 문제는 2019년 정보올림피아드 2차 대회 중등부 1번 문제 입니다. 문제 난이도가 높지 않아 다빈치코딩 알고리즘에도 똑같이 작성해 놓았습니다. 

    https://wikidocs.net/232738

     

    02. 신기한 수(정올 2019)[백준 17618]

    문제 출처 : [신기한 수](https://www.acmicpc.net/problem/17618) 이 문제는 2019년 정보올림피아드 2차 대회 중등부 1번 문제 입니다. 각…

    wikidocs.net

    문제 이해하기

    이 문제를 해결하기 위해서는 숫자의 각 자릿수를 계산하는 방법에 대해 숙지하고 있어야 합니다. 아직 숫자의 자릿수를 계산하는 방법을 잘 모르겠다면 아래 링크를 통해 확인 바랍니다.

    https://wikidocs.net/232701

     

    07. 숫자 각 자릿수 더하기

    숫자 관련된 문제를 풀다보면 자릿수를 각각 계산해야 하는 경우가 있습니다. 예를 들어 1234라는 숫자가 있을 경우 1 + 2 + 3 + 4인 10을 출력해야 하는 경우가 그렇습…

    wikidocs.net

    각 자릿수를 더한 값으로 원래의 수가 나누어지는 경우를 신기한 수라고 하였습니다. 어떤 수가 주어졌을 때 어떤 수까지 이 신기한 수가 몇 개인지 찾는 것이 문제 입니다.

    코드 작성하기

    간단한 문제이기 때문에 바로 코드작성을 해보겠습니다.

    입력 받기

    N = int(input())
    

    신기한 수의 개수를 알아내고 싶은 숫자 N을 입력 받습니다.

    결과 출력하기

    ans = 0
    for i in range(1, N+1):
        if solve(i):
            ans += 1
        
    print(ans)
    

    1부터 N까지 모든 숫자의 신기한 수를 찾습니다. solve 함수를 통해 True가 리턴되면 신기한 수가 되어 ans에 1씩 더해줍니다. 최종적으로 ans를 출력하면 신기한 수의 개수를 출력하는 것입니다.

    solve 함수

    def solve(n):
        si = str(n)
        tmp = 0
        for s in si:
            tmp += int(s)
        if n % tmp == 0:
            return True
        return False
    

    solve 함수는 숫자를 문자로 바꿔서 계산해 주었습니다. tmp 값이 각 자릿수의 합입니다. 최종적으로 n을 tmp로 나누어 0이 나오면 True를 리턴하고, 아닌 경우에는 False를 리턴합니다.

    전체 코드

    전체 코드를 확인해 보겠습니다.

    N = int(input())
    
    def solve(n):
        si = str(n)
        tmp = 0
        for s in si:
            tmp += int(s)
        if n % tmp == 0:
            return True
        return False
    
    ans = 0
    for i in range(1, N+1):
        if solve(i):
            ans += 1
        
    print(ans)
    
    반응형