문제 링크
https://www.acmicpc.net/problem/1065
문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
예제 입출력
입력1
110
출력1
99
입력2
1
출력2
1
입력3
1000
출력3
144
문제 풀이 및 코드
문제를 풀기 위해서는 등차수열을 판단하는 것이 중요한 문제로 판단됩니다. 등차수열이란 연속하는 두 항의 차이가 모두 일정한 수열을 뜻합니다. 한수는 주어진 수가 등차수열을 이룬 경우입니다. 예를 들어 100이라는 수가 주어진다면 수열 1, 0, 0이 등차수열인지 판단하는 문제입니다. 만약 주어진 수가 등차수열을 이룬다면 한수가 되는 것입니다.
결론적으로 100 미만인 수는 모두 한수입니다. 두 자릿수의 경우 앞의 항과 뒷 항의 차가 공차가 되며, 이후 연속된 숫자가 존재하지 않기 때문입니다. 한 자릿수의 경우 공차가 0이고 자기 자신의 수가 되므로 등차수열을 이룬다고 할 수 있습니다.
입력의 범위가 1 ~ 1000이므로 100 미만의 수는 모두 한수이고, 1000은 한수가 아니기 때문에 100 ~ 999 범위의 숫자가 한수인지 아닌지를 판단하는 것이 중요한 문제입니다.
따라서 반복문을 통하여 100 미만인 수의 경우 한수이므로 1씩 증가하도록 하고, 100 이상인 수의 경우 첫 번째 수와 두 번째 수의 차가 두 번째 수와 세 번째 수의 차와 같은지를 판단합니다. 만약 두 수의 차가 같으면 한수로 판단하여 1씩 증가하도록 하여 결과를 출력합니다.
예를 들어, 135의 경우 1 - 3과 3 - 5는 -2로 같으므로 한수입니다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
|
n = int(input())
hansu = 0
for i in range(1, n+1):
if i < 100:
hansu += 1
if i >= 100:
temp1 = int(str(i)[0]) - int(str(i)[1])
temp2 = int(str(i)[1]) - int(str(i)[2])
if temp1 == temp2:
hansu+=1
print(hansu)
|
cs |
본 코드는 제가 직접 작성한 것으로 더 나은 코드가 존재할 수 있으니 참고하시기 바랍니다.
'코딩 테스트(Coding Test) > 백준' 카테고리의 다른 글
[백준] 1436번: 영화감독 숌 - 파이썬(Python) (0) | 2022.08.16 |
---|---|
[백준] 1929번: 소수 구하기 - 파이썬(Python) (0) | 2022.07.29 |
[백준] 1018번: 체스판 다시 칠하기 - 파이썬(Python) (4) | 2022.07.08 |