어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
즉, 135(공차 2) 258(공차 3) 과 같은 수를 한수라고 한다.
1000보다 작으니까 최대가 세자리 수 라는 것도 단서다!
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
def hansu(n):
cnt = 0
for i in range(1,n+1):
num_list = list(map(int, str(i)))
if i < 100:
cnt += 1
elif num_list[1]-num_list[0] == num_list[2]-num_list[1]:
cnt += 1
return cnt
n = int(input())
print(hansu(n))
한수 판별 함수를 만들어 준다
함수는
def 함수명(매개변수):
소스코드
return 반환값
구조 이다
우리의 최종 목표는 개수를 출력하는 것이다. 때문에 return 값은 cnt가 되어야 한다.
함수 소스코드는 한수의 개수를 카운트할 cnt를 0으로 초기세팅 해준다
for 문을 활용하여 1~매개변수 n을 범위로 갖고 변수 i(숫자)를 설정해준다.
범위에서 n+1까지인 이유는 range 후의 범위값은 -1되기 때문이다.
임의의 숫자를 저장할 num_list를 만들어 준다.
숫자 각각의 자리 수를 비교하기 위해서는 자리수를 분리해야한다.
때문에 먼저 문자열인 str으로 전환후 int형으로 map(전체 변환)하고, list화 한다
이후 숫자(i)가 100보다 작으면 한자리수이거나 두자리 수 이므로
각각의 자리수를 비교할 필요 없이 무조건 한수가 된다.
때문에 바로 카운트를 더해준다. cnt += 1 은 cnt = cnt+1이라는 뜻
그 이외의 경우일시 num_list(숫자를 따로 분리시켜 놓은 것)의 두번째 자리수와 첫번째 자리수의 차가
세번째 자리수와 두번째 자리 수의 차와 같을 경우 한수이므로 카운트 더해준다
문제에서 3자리의 자연수까지만 비교하므로 네번째 자리수까지 비교할 필요가 없다.
앞서 말했듯이 return cnt해준다.
n을 입력 받는다.
함수 hansu를 실행시켜 출력한다.