728x90
백준 1065 한수
문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
문제 해설
한수 : 각 자리가 등차수열을 이루는 수 ex) 111, 123, 135
1보다 크고 n보다 작은 한수의 개수를 출력하는 문제이다.
1000보다 작거나 같은 수가 주어지는데
한 자리 수와 두 자릿수는 한수이고 네 자리 수인 1000은 한수가 아니기 때문에
세 자리 수만 한수인지 아닌지 구별하면 된다.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
제출
n=int(input())
def h(n):
for i in range(100,n+1):
b=i//10%10
if (i//100-b)!=(b-i%10):
n-=1
print(n)
h(n)
해설
함수 카테고리의 문제이기 때문에 함수를 만들어준다.
백의 자리 수 : i//100
십의 자리 수 : i//10%10
일의 자리 수 : i%10
100부터 n까지 백과 십의 자리수의 차와 십와 일의 자릿수의 차가 다를 때 입력된 수에서 -1을 하여 한수를 체크한다.
예외가 되는 1000은 백의 자릿수가 10이 되어 한수가 아닌 결과가 나오기 때문에 따로 처리해 주지 않아도 된다.
예제
110
1
210
1000
500
결과
다른 제출
def h(n):
c=0
for a in range(1,n+1):
if a<100:
c+=1
else:
l=list(map(int,str(a))) #숫자를 리스트로 만들어 각 자리를 구하는 방법
if l[0]-l[1]==l[1]-l[2]:
c+=1
print(c)
n=int(input())
h(n)
def h(n):
l=list(map(int,str(n)))
m=[]
if n<100:
return 1
else:
for a in range(len(l)-1): #1000이상의 수도 입력할 수 있도록 만든 함수
m.append(l[a]-l[a+1])
if len(set(m))==1:
return 1
else:
return 0
n=int(input())
r=0
for a in range(1, n+1):
r+=h(a)
print(r)
728x90
'Python > 백준' 카테고리의 다른 글
[Python] 백준 11720 숫자의 합 - 문자열(2) (0) | 2022.09.17 |
---|---|
[Python] 백준 11654 아스키 코드 - 문자열(1) (0) | 2022.09.16 |
[Python] 백준 4673 셀프 넘버 - 함수(2) (0) | 2022.09.14 |
[Python] 백준 15596 정수 N개의 합 - 함수(1) (0) | 2022.09.13 |
[Python] 백준 4344 평균은 넘겠지 - 1차원 배열(6) (0) | 2022.09.12 |
댓글