728x90

https://www.acmicpc.net/problem/1065

 

1065번: 한수

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

www.acmicpc.net

 

가장 먼저 생각해본 부분은 100미만의 수이다.

만약 0~9라면 무조건 비교할 수가 없기에 무조건 한수가 될 것이다.

만약 10~99라면 수가 2개 밖에 되지 않기 때문에 무조건 한수가 될 것이다.

 

그렇기 때문에 해당 수들은 모두 한수로 처리를 해주고 들어가야 한다.

def hansoo(num):
    hansoo_list = []
    while num > 0:
        hansoo_list.append(num % 10)
        num //= 10
    for t in range(len(hansoo_list) - 2):
        if hansoo_list[t+1] - hansoo_list[t] != hansoo_list[t+2] - hansoo_list[t+1]:
            return False
    return True

 

우선 해당 수가 한수인지 판별해주는 함수이다.

만약 100 미만의 수가 들어오면 배열의 크기가 2 이하가 되기 때문에 무조건 True가 반환되게 된다.

 

100 이상의 수가 들어오게 된다면, 해당 수를 모두 쪼개서 배열에 저장한다.

그리고 반복문을 통해 간격이 다른 구간이 있다면 바로 False를 반환한다.

 

import sys

N = int(sys.stdin.readline())

result = 0


def hansoo(num):
    hansoo_list = []
    while num > 0:
        hansoo_list.append(num % 10)
        num //= 10
    for t in range(len(hansoo_list) - 2):
        if hansoo_list[t+1] - hansoo_list[t] != hansoo_list[t+2] - hansoo_list[t+1]:
            return False

    return True

for i in range(1, N + 1):
    if hansoo(i):
        result += 1

print(result)

 

이렇게 전체 코드이다.

입력한 수에 따라 반복문으로 한수의 개수를 찾아서 출력하게 된다.

 

'알고리즘 > 브루트포스' 카테고리의 다른 글

백준 1182 부분수열의 합  (0) 2024.01.15
백준 4675 셀프 넘버  (1) 2024.01.15
게임판 덮기  (0) 2022.09.17
소풍  (1) 2022.09.16
보글 게임  (1) 2022.09.16

+ Recent posts