728x90
문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다.
등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다.
N이 주어졌을 때, 1보다 크거나 같고,
N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
def decide(num):
if num >99: #백의 자리인 경우
numA = num//100 #백의 자리 수
numB = num%100//10 #십의 자리 수
numC = num%10 #일의 자리 수
if (numB-numA) == (numC-numB): #등차수열이라면
return 1
else:
return 0
else : #십의 자리까지인 경우 모두 등차수열
return 1
num = int(input())
count = 0 #한수 개수
for i in range(1, num+1):
if decide(i) == 1: #한수가 맞다면
count += 1
else:
pass
print(count)
문제에서 제시된 등차수열의 개념을 123과 124를 예로 들어보겠습니다.
123에서 1과 2의 차이는 +1입니다. 2와 3에서도 +1입니다.
즉, 수가 일정한 값으로 상승했기 때문에 등차수열에 해당합니다. => 한수
124에서 1과 2의 차이는 +1이지만 2와 4는 +2입니다.
이것은 일정한 값으로 상승한 것이 아니기 때문에 등차수열이 아닙니다.
등차수열은 음의 값의 일정한 변화도 허용하기 때문에
432와 같이 -1로 일정하게 감소하는 경우에도 등차수열에 해당합니다.
일의 자리(1~9)인 경우 비교할 대상이 없습니다.
그래서 모두 등차수열로 인지합니다.
십의 자리(10~99)의 경우에도 자릿수의 차는 알 수 있지만 비교 대상은 없습니다.
그래서 모두 등차수열로 인지합니다.
백의 자리(100~999)인 경우에는 위의 예시처럼 비교 대상이 생깁니다.
그래서 등차수열인지 구분해야 합니다.
수를 3등분(a, b, c) 하고, (a와 b의 차)와 (b와 c의 차)가 일치한다면 등차수열입니다.
-끝-
728x90
'작업 > Problem Solving' 카테고리의 다른 글
백준 2675(문자열 반복) 파이썬(python) 해결 (0) | 2020.07.27 |
---|---|
백준 10809(알파벳 찾기) 파이썬(python) 해결 (0) | 2020.07.27 |
백준 4673(셀프 넘버) 파이썬(python) 해결 (2) | 2020.07.26 |
백준 4344(평균은 넘겠지) 파이썬(python) 해결 (0) | 2020.07.24 |
백준 2577(숫자의 개수) 파이썬(python) 해결 (0) | 2020.07.23 |