본문 바로가기
코딩/백준(BOJ)

백준 BOJ 1065번 한수 실버4 - Python 풀이

by YS_LEE 2023. 10. 23.
반응형

문제

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. 

입력

첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.

출력

첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.

소스 코드

def isHansu(x):
    if x < 100:
        return True
    elif (x // 100 - (x % 100) // 10) == ((x % 100) // 10 - (x % 10)):
        return True
    else:
        return False


n = int(input())
cnt = 0
for i in range(1, n + 1):
    if isHansu(i):
        cnt += 1

print(cnt)

문제에서 주어지는 수의 범위는 1~1000이다. 즉, 한 자리수, 두 자리수, 세 자리수 그리고 1000이 주어진다.

한수의 정의: 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다.

 

1. 한 자리수 혹은 두 자리수 정수는 무조건 한수다. (각 자리 사이의 구간 개수가 0 또는 1이기 때문에 구간끼리 간격을 비교할수 없다. 따라서 등차를 이룬다고 볼 수 있다.)

2. 세 자리 수는 각 자리 사이의 구간이 두개 이므로 그 두 구간을 비교해주면 된다. 모듈러 연산을 통해 원하는 자리 수의 숫자를 선택할 수 있다.

3. 1000은 한수가 아니므로 무시한다.

 

반응형

댓글