문제 보기: https://www.acmicpc.net/problem/1065
문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
풀이 과정
1. 한수의 의미를 먼저 알아봐야 한다. 문제에서 정수 X의 '각 자리'가 등차수열을 이룬다면이라고 되어있으므로 입력값의 각 자릿수를 배열 형식으로 비교해야 한다는 것을 생각해야 한다.
2. 그리고 한자리일 때 두 자리일 때 그리고 4자리일 때까지의 경우만 생각하면 된다. ( 제약 조건이 1000보다 작거나 같으니 있으므로)
3. 결과적으로 3자리 수일 때 첫 번째와 두 번째의 차와 두 번째와 세 번째의 차가 같지 않은 경우를 찾고 이 값을 count 하여 총개수에서 빼주면 원하는 값을 구할 수 있다.
4. 유일한 4 자릿수인 1000일 경우에도 한수가 아니므로 빼도록 한다.
코드
import sys
num = int(sys.stdin.readline())
count = 0
for i in range(1, num + 1):
if len(str(i)) == 3 and (int(str(i)[2]) - int(str(i)[1])) != (int(str(i)[1]) - int(str(i)[0])):
count += 1
elif len(str(i)) == 4:
count += 1
print(num - count)
'Algorithm' 카테고리의 다른 글
[백준_2606] 바이러스 (0) | 2022.06.02 |
---|---|
[백준_1152] 단어의 개수 (0) | 2022.06.01 |
[백준_8958] OX퀴즈 (0) | 2022.05.30 |
[백준_10871] x보다 작은 수 (0) | 2022.05.29 |
[백준_14681] 사분면 고르기 (0) | 2022.05.28 |