본문 바로가기
알고리즘

[Python] 백준 1065번: 한수

by 내 코딩 2023. 2. 7.
반응형

코드

def hansu(n):
    count = 0
    for i in range(1, n+1):
        n_list = list(map(int, str(i)))
        if i < 100:
            count += 1
        elif n_list[0] - n_list[1] == n_list[1]-n_list[2]:
            count += 1
    return count

n = int(input())
print(hansu(n))

설명

등차수열에 대해 먼저 알아야한다.

등차수열은 숫자들의 간격이 동일한 나열인 상태여야한다. ex)123, 135, 369 각 숫자들이 서로 일정하게 간격을 유지해야한다.

두 자리 숫자는 등차수열이라고 비교할 숫자들이 없기 때문에 모두 한수이다.

한수가 몇 개인지 확인하기 위해 count = 0으로 해준다.

1부터 입력받은 n번만큼 반복하기 위해 n+1을 해준다.

map함수는 문자형을 입력받아야하기 때문에 str()을 통해 i를 문자형으로 만들어주고 타입을 int로 지정해서 문자열 -> 정수형 이런 흐름으로 만들어준다. 그리고 이것을 list로 묶는다.

i가 100아래는 모두 한수이기 때문에 100이하에서는 count를 세고,

슬라이싱을 이용해 첫번 째 수와 두번 째 수의 차가 두번 째 수와 세번 째 수의 차와 같다면 이것은 등차수열이라고 할 수 있다. ex) 123 => 1-2 = -1,  2-3=-1

마지막에 count를 리턴해서 n값을 입력받고 그 n을 함수에 바로 넣어 계산한다.

 

댓글