본문 바로가기
IT/알고리즘

[BAEKJOON] 백준 1065번: 한수 (Python)

by 무녈 2021. 8. 14.

문제 링크: https://www.acmicpc.net/problem/1065

 

1065번: 한수

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

www.acmicpc.net


문제

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

입력

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

출력

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


코드

n = int(input())
hansu = 0

for i in range(1, n+1):
    if i <= 99:
        hansu += 1

    else:
        num = list(map(int, str(i)))
        if num[2]-num[1] == num[1]-num[0]:
            hansu += 1
    
print(hansu)

코드 설명

  1. 실제 문제 풀이를 위한 코드는 정말 간단하나, 한수에 대해 이해해야 풀이가 가능하다.
    어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다고 적혀있는데, 설명이 어렵고,
    예를 들어 357이라는 숫자가 있을때 각 자리수끼리 분해한다. 3 5 7
    연속된 자리수 끼리 뺄셈을 했을 때 같은 수가 나오면 한수다. 3-5 = 5-7
    다른 예시로 1000을 분해하면 1, 0, 0, 0이 되는데 이는 한수가 아니게 된다.
    그리고 한 자리 수 정수와 두 자리수 정수는 모두 한수이다. (1부터 99)
  2. 사용한 변수
    n: 입력을 숫자 / hansu: 숫자 n 까지의 한수의 개수
  3. for문을 이용하먀, 100 미만의 정수는 모두 한수이기 때문에 1씩 더한다.
  4. 3자리 자연수의 경우 각 자리수를 분해하여 배열을 만든다.
    인덱스로 원소를 불러와 연속된 자리수 끼리 차를 비교하여 동일할 경우 한수 +1을 해준다.
  5. 출력

 

 

반응형

댓글