Algorithm/백준

백준(baekjoon) 1065번 한수 풀이 | 파이썬 Python

daeunnniii 2021. 2. 11. 19:54
728x90
반응형

한수

www.acmicpc.net/problem/1065

 

1065번: 한수

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

www.acmicpc.net

문제

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

 

입출력 예제

입력1

110

출력1

99

입력2

1

출력2

1

입력3

210

출력3

105

풀이

문제에서는 입력 조건으로 1000보다 작거나 같은 자연수 N을 제시했지만, 1000보다 큰 수도 입력될 수 있다고 가정하고 작성하였습니다.

n=int(input())
result=0
def d(n):
    count=set()		#set 사용
    n=str(n)
    for j in range(len(n)-1):
        count.add(int(n[j+1])-int(n[j]))	#각 자리수의 차를 count에 넣기
    if len(count)==1:			#count의 크기가 1이면 각 자리가 등차수열을 이루므로
        return 1			#1 반환
    else:				#아닐 경우 0반환
        return 0
for i in range(1,n+1):
    if i>=1 and i<=99:			#1부터 99사이의 수는 모두 한수
        result+=1
    else:				#100보다 크거나 같은 수는 d()함수 호출
        result+=d(i)
print(result)

99보다 클 경우 d함수를 호출하도록 작성하였습니다.

d함수는 각 자리수의 차를 모두 set에 저장하고, set의 원소 개수가 1이면 1, 1이 아니라면 0을 반환하도록 하였습니다.

728x90
반응형