자기계발
백준
1065 · 한수

백준 1065번 한수

문제

양의 정수 X의 각 자리 숫자가 등차수열을 이루면 그 수를 한수라고 한다. 등차수열은 연속한 두 수의 차이가 일정한 수열이다. 1000 이하의 자연수 N이 주어질 때, 1 이상 N 이하의 한수가 몇 개인지 출력한다.

풀이

등차수열은 공차(연속한 두 수의 차이)가 일정해야 한다. 100 미만의 수는 자릿수가 2개 이하라 항상 등차수열이므로 전부 한수다. 그래서 100 이상 1000 미만의 세 자리 수만 따로 확인하면 된다. 1000은 한수가 아니다.

세 자리 수는 백의 자리, 십의 자리, 일의 자리를 구해 (백 - 십)과 (십 - 일)이 같으면 한수로 본다. 조건에 맞는 수를 리스트에 담고 리스트의 길이를 반환하는 함수로 풀었다.

def hansu(n):
    list_hansu = []
    for i in range(1, n+1):
        if i < 100:
            list_hansu.append(i)
        elif 100 <= i < 1000:
            hun_quo = i // 100
            ten_quo = (i % 100) // 10
            remainder = (i % 100) % 10
 
            diff_hunten = hun_quo - ten_quo
            diff_tenrmd = ten_quo - remainder
 
            if diff_hunten == diff_tenrmd:
                list_hansu.append(i)
 
    return len(list_hansu)
 
num = int(input())
print(hansu(num))

짚고 갈 점

  • 함수만 정의하고 제출하면 NameError가 난다. 백준은 표준 입력을 읽어 결과를 출력하는 프로그램을 제출하는 방식이라, 입력을 받아 함수를 호출하고 출력하는 부분까지 직접 작성해야 한다.

출처