[Python/파이썬] 백준 1065 - 한수

반응형

문제 설명

 

입출력 예제

 

1065번: 한수

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

www.acmicpc.net


풀이 코드

처음에는 문제 설명을 이해하는게 어려울 것이다. (문제 설명이 좀 많이 아쉽;)

왜 110을 입력했을 때 결과가 99가 나오는지 이해할 수가 없었다.

하지만 왜 그러한 결과가 나오는지 이해만 한다면 문제는 실버난이도 답게 쉽게 풀 수 있을 것이다.

 

일단 "한수"라는 것은 각 자리수의 차이가 일정한 수이다.

111 이라는 수가 주어진다면 이 수는 각 자리수 차이가 0이므로 ㅠ이다.

 

그렇다면 5는 어떨까?

자리수를 비교할 대상이 없지만 이 수도 한수로 본다.

그 이유는 예제 입력2번의 입력이 1인데 결과가 1인 것에서 알 수 있다.

 

그렇다면 14는?

이 수도1 -> 4로 증가하는데 3씩 증가하는 등차수열로 보고 "한수"라고 할 수 있다.

 

그렇다면 이런 결론이 나온다.

  • 1자리 ~ 2자리 수들은 모두 한수가 된다. ( 1 <= 한수 < 100 )
  • 3자리수 부터 등차를 확인하는 비교 대상 수가 2개가 있으므로 3자리이상 수 부터 한수인지 확인하는 코드를 작성한다.

 

정답 코드
import sys
input = sys.stdin.readline

n = int(input())
cnt = 0

for i in range(1, n + 1):
    if i < 100:
        cnt += 1
    if 100 <= i < 1000:
        sep = list(map(int, str(i)))
        if sep[0] - sep[1] == sep[1] - sep[2]:
            cnt += 1

print(cnt)