Algorithm/Implementation

(Python/파이썬) - 백준(BOJ) 1065번 : 한수

하눤석 2022. 4. 7. 11:55
728x90

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

 

1065번: 한수

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

www.acmicpc.net


  • 문제 : 

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

 

 

 


  • 풀이 :

N이 최대 1,000 이므로 3가지 경우로 나누어서 생각하였다.

 

1. N이 100보다 작을 떄 -> 그냥 N값을 출력하면 된다. 1자리 수와 2자리 수는 모두 등차수열이기 때문이다.

 

2. N이 1,000일 때 -> 144개라는 사실을 예제를 통해 알고 있다.

 

3. 위에서 걸러지지 않은 나머지 경우 -> 반드시 N은 3자릿수이라는 보장이 되어있기 때문에 2번째자리 - 1번째자리가 

1번째자리 - 0번째자리랑 같다면 카운팅해주면 된다.

 

주어진 문제의 조건에만 딱 맞추어서 해결했다.

만약 N의 범위가 더 커서 보편화하는 코드였다면 1번조건과 3번조건만 사용하여 3번조건에서 for문으로 i+1번째  - i번째 값으로 등차수열 여부를 확인했을 것 같다.

 

 


  • 소스코드 : 
N = int(input())
if N < 100:
    print(N)
elif N == 1000:
    print(144)
else:
    ans = 99
    for i in range(100,N+1):
        i = str(i)
        if int(i[1]) - int(i[0]) == int(i[2]) - int(i[1]):
            ans += 1
    print(ans)
320x100