본문 바로가기
코딩테스트/백준 알고리즘 풀이

[백준 알고리즘/python] 백준 1065번 한수, 파이썬

by Godgil 2020. 3. 16.

백준 알고리즘 1065번 한수, 파이썬

이번에 푼 문제는 백준 알고리즘의 1065번 한수 문제이다.

파이썬으로 풀어보았다.

 

문제가 요구하는 것은,

정수 X가 각 자리수로 나뉘어 졌을 때, 등차수열을 이루면 그 수는 한수라고 하는데,

N이라는 정수가 주어졌을때, N보다 작거나 같은 한수들의 개수를 구하라는 문제이다.

이 문제를 잘 생각해보면 한자리 정수와 두자리 정수는 그냥 무조건 한수가 된다.

규칙을 찾고 말고 하려면 세 자리는 되어야 일정하게 차이가 난다는걸 알 수 있는데,

한자리와 두자리는 그냥 한수로 두고 코드를 짜면 된다.

 

 

#생각1. 숫자가 주어지면 각 자리 수를 나눈다.

#생각2. 각 자리 수를 리스트에 넣고, 인덱스의 0번과 1번의 차, 1번과 2번의 차가 같으면 True 다르면 False 반환

#생각3. 반복문으로 True의 개수를 출력한다.

 

간단했다.

def is_han(number: int):#한수인지 아닌지 판별하는 함수
    number = str(number)
    if len(number) == 1 or len(number) == 2: # 한자리나 두자리수면 무조건 True
        return True
    else:
        lst = list()
        for i in number:
            lst.append(int(i))#자리수를 문자열로 취급해서 나누기
        if lst[0] - lst[1] == lst[1] - lst[2]: # 각 등차 구하기
            return True
        else:
            return False

num = int(input())
count = 0
for i in range(1,num+1):
    if is_han(i) == True:
        count = count + 1
print(count)

 

나는 이렇게 구현을 했고, 제출해서 맞았다.

간결하고 더 쉬운 코드가 있을거 같은데, 좀 더 생각해보다가 안되면 찾아봐야겠다.

함수쪽으로 들어오니 난이도가 좀 낮아진 느낌이다.

 

문제 출처

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

 

1065번: 한수

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

www.acmicpc.net

 

댓글