본문 바로가기
Python/백준

[Python] 백준 1065 한수 - 함수(3)

by 푸_푸 2022. 9. 15.
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


결과

백준 1065 한수

 

 

1065번: 한수

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나

www.acmicpc.net

 

다른 제출

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

댓글