여기에서 한수에 대한 개념을 잘 이해해야 문제를 쉽게 이해할 수 있다
숫자 사이의 차가 동일하게 이어지는 것을 등차수열이라고 하는데,
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 단위의 숫자는 확인하지 않고 바로 한수 개수로 추가한다는 점이다
그 이유는 일의 자릿수 단위와 십 단위는 무조건 한수의 특성에 적합하기 때문이다
그리고 그 외의 숫자들에서 각 단위 숫자들의 차가 같은지 확인해 한수의 개수를 추가해주는 코드를 작성한다면
정답임을 확인할 수 있을 것이다
'코딩 테스트 > 백준 파이썬 문제 풀이' 카테고리의 다른 글
[백준 11720번 파이썬] 숫자의 합 (0) | 2022.04.01 |
---|---|
[백준 11654번 파이썬] 아스키 코드 (0) | 2022.04.01 |
[백준 4673번 파이썬] 셀프 넘버 (0) | 2022.04.01 |
[백준 15596번 파이썬] 정수 N개의 합 (0) | 2022.04.01 |
[백준 4344번 파이썬] 평균은 넘겠지 (0) | 2022.03.31 |