본문 바로가기
알고리즘/백준 - 파이썬

백준) 파이썬 1065번 한수 문제 (파이썬)

by AI Sonny 2022. 5. 31.
728x90

문제) 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다.

         등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다.

          N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. 

def solve(num):
    hansu_cnt = 0
    for i in range(1, num+1):
        num_list = list(map(int,str(i)))
        if i < 100:  # 100 미만은 모두 한수
            hansu_cnt += 1
        elif num_list[0]-num_list[1] == num_list[1]-num_list[2]: # 등차수열의 특징
            hansu_cnt += 1
    return hansu_cnt
num = int(input())
print(solve(num))

이번 문제는 한수의 개념에 대해 알아야한다. 등차수열을 구현할 줄 알아야하는 것이 제일 중요하다.

 

처음 def solve(num)으로 선언을 한 후 hansu_cnt = 0 을 선언하여 초기화를 해주었고 for 문에서 1보다 크거나 같고,

 

n보다 작거나 같아야하기 때문에 num + 1을 범위로 잡았습니다.

 

그리고 num_list를 통해 입력값을 받게 하였습니다.

 

100미만의 값은 모두 한수이기 때문에 if문을 통해 100미만일 때 카운트하고,

 

첫번째 배열 - 두번째 배열이 두번째 배열 - 세번째 배열과 같다면 카운트를 한다.

 

이 과정을 return으로 반복하고, 마무리한다.

 

그 후 num 값을 입력하고, print(solve(num())을 통해 출력한다.

 

이번 문제는 제 기준에서 난이도가 꽤 있는 문제인 것 같다. 한번씩 곱씹으면서 다시봐야겠다는 생각이 든다.

 

이해가 안되시거나 틀린 정보는 댓글로 알려주시면 감사하겠습니다!

728x90

댓글