[Baekjoon] 1065번 한수

Updated:

문제

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

입력

첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.

출력

첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.

예제

Example 1:

Input: 
110
Output: 
99

Example 2:

Input:
1
Output:
1

Example 3:

Input:
210
Output:
105

Example 4:

Input:
1000
Output:
144

조건

시간 제한 : 2초

메모리 제한 : 128 MB

풀이과정

풀이

import sys
num = int(sys.stdin.readline())
if 100 > num:
  print(num)  
else:
  count = 99  
  for i in range(100,num+1):
    s = list(str(i))
    diff = int(s[0])- int(s[1])
    for j in range(1,len(s)-1):
      if diff != int(s[j]) - int(s[j+1]):
        count -= 1
        break
    count += 1

  print(count)

한자리나 두자리수인 경우 무조건 등차수열이다. 더이상 비교대상이 없기 때문. 따라서 100밑으로는 고려할 필요가 없다. 100이상인 경우에서 첫두자리의 차이를 구한다. 항상 count가 +1로 해준다. 그리고 diff가 다른 경우에만 count를 -1해주고 break해서 나오면 count가 유지가 되므로 답이 구해진다.

Leave a comment