문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
이 문제는 한수의 개념이 생소해서 조금 헤맸다. 그런데 문제의 예제 1에서 110을 입력하면 99가 출력된다는 걸 알 수 있다. 100 ~ 110은 모든 자리가 등차수열을 이루지 않아 한수가 아니므로, 1부터 99는 모두 한수라는 뜻이다. 이것을 파악하고 나니 문제가 쉽게 풀렸다.
n = int(input())
if n < 100:
ans = n
else:
ans = 99
for i in range(100,n+1):
i = str(i)
d0 = int(i[0]) - int(i[1])
check = True
for j in range(2, len(i)):
d = int(i[j-1])-int(i[j])
if d0 != d:
check = False
break
if check:
ans += 1
print(ans)
들어온 입력이 100 미만일 땐, 무조건 그 입력만큼이 한수이므로 입력을 그대로 출력하도록 했다. 100 이상이 들어왔을 땐 한수의 초기값을 99로 정하고, 100부터 입력값만큼 반복문을 돌려 한수를 찾았다. 숫자를 문자열로 바꾸고 첫 번째 자리의 수와 두 번째 자리의 수의 차를 공비로 정했다. 그리고 두 번째 자리의 수부터 그다음 자리의 값의 차를 계산하고 그 값이 공비와 다르면 한수가 아닌 것으로 판단했다. 문제에서 1000 이하의 수만 입력으로 주어지지만 이 코드는 더 긴 자리의 숫자도 한수 판별이 가능하다.
'개발 > 알고리즘' 카테고리의 다른 글
[BOJ(백준) 1316] 그룹 단어 체커 - 파이썬 풀이 (0) | 2021.05.30 |
---|---|
[BOJ(백준) 2941] 크로아티아 알파벳 - 파이썬 풀이 (0) | 2021.05.30 |
[BOJ(백준) 5622] 다이얼 - 파이썬의 switch와 딕셔너리 (0) | 2021.05.28 |
[BOJ(백준) 4673] 셀프넘버 - 파이썬 풀이 (1) | 2021.05.24 |
[BOJ(백준) 4344] 평균은 넘겠지 - 파이썬 풀이 (0) | 2021.05.23 |