문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
입출력 예
제출 코드
n = int(input())
if n <= 99:
print(n)
else:
cnt = 99
for num in range(100, n+1):
num = str(num)
gap = int(num[1]) - int(num[0])
for j in range(1, len(num)-1):
if gap != int(num[j+1]) - int(num[j]):
break
else:
cnt += 1
print(cnt)
(1) line 2, 3
문제에서 언급된 한수의 조건에 따르면 100 미만의 수는 모두 한수이다. 그렇기 때문에 입력값이 100 미만의 수로 주어진다면 바로 print(n)을 하는 식으로 효율을 증대시킨다.
(2) line 6
위에서 언급한 것과 마찬가지로 99 이하의 수는 모두 한수이므로 한수를 카운팅하는 변수 cnt를 99로 선언해준다.
(3) line 7 ~ 9
100부터 입력값인 n까지 1씩 증가시키며 해당 숫자가 한수인지 확인해본다. 한수의 조건인 각 자릿수 간의 일정한 차이를 확인해야 하는데, int형으로는 확인하기가 까다롭기 때문에 반복문을 돌릴 때마다 해당 숫자를 str형으로 변환시킨 후 진행한다. 우선은 첫 번째 숫자와 두 번째 숫자의 차이를 변수 gap에 할당해준다.
(4) line 10 ~ line 15
숫자의 각 자릿수가 일정한 차이를 가지는지 확인해보고 그렇다면 cnt를 +1, 그렇지 않다면 다음 수로 넘어간다. 이후 최종적으로 cnt 값을 출력한다.
Source : https://www.acmicpc.net/problem/1065
'PS > 백준' 카테고리의 다른 글
[백준 알고리즘][파이썬/Python] 1712번: 손익분기점 (0) | 2020.04.01 |
---|---|
[백준 알고리즘][파이썬/Python] 2941번: 크로아티아 알파벳 (0) | 2020.03.31 |
[백준 알고리즘][파이썬/Python] 4344번: 평균은 넘겠지 (0) | 2020.03.29 |
[백준 알고리즘][파이썬/Python] 1157번: 단어 공부 (0) | 2020.03.28 |
[백준 알고리즘][파이썬/Python] 1152번: 단어의 개수 (0) | 2020.03.27 |