본문 바로가기

코딩 테스트/백준 파이썬 문제 풀이

[백준 1065번 파이썬] 한수

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

 

여기에서 한수에 대한 개념을 잘 이해해야 문제를 쉽게 이해할 수 있다

숫자 사이의 차가 동일하게 이어지는 것을 등차수열이라고 하는데,

1 2 3 4 5 / 1 3 5 7 9 / 1 4 7 10

등과 같은 수열들이 그 예시로 존재한다

그러다 이 문제에서는 이 등차수열을 한 숫자의 자릿수 사이의 차에 적용하고 있다

456, 246, 789와 같은 백 단위의 숫자들을 보면

각 자릿수마다 등차수열의 특성을 가지고 있는 것을 볼 수 있다

이렇게 한 숫자 안에서 등차수열의 특성을 가지고 있는 숫자들을 '한수'라고 한다

 

num = int(input())
netural = set(range(1, num))
count = 0
for i in range(1, num+1):
    if 0 < i < 100:
        count += 1
    else:
        str_num = list(map(int, str(i)))
        if str_num[0] - str_num[1] == str_num[1] - str_num[2]:
            count += 1
print(count)

 

이 정답 코드에서 신경 써야 할 부분은 바로 1부터 입력받는 숫자까지의 for문에서

1~99 단위의 숫자는 확인하지 않고 바로 한수 개수로 추가한다는 점이다

그 이유는 일의 자릿수 단위와 십 단위는 무조건 한수의 특성에 적합하기 때문이다

그리고 그 외의 숫자들에서 각 단위 숫자들의 차가 같은지 확인해 한수의 개수를 추가해주는 코드를 작성한다면

정답임을 확인할 수 있을 것이다