본문 바로가기
백준 알고리즘

[백준 1065][파이썬] 한수

by 웅대 2023. 1. 16.
728x90
반응형

https://www.acmicpc.net/problem/1065

 

1065번: 한수

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

www.acmicpc.net

 

cnt라는 변수를 만들고 반복문으로 1부터 입력받은 값까지 한수가 있으면 cnt 값을 1씩 증가시키면 된다.

 

한수가 되기 위해서는 연속된 값의 차이를 모두 조사해서 조사한 값들이 모두 같아야 한다.

 

연속된 값의 차이를 구하기 위해서 해당 숫자의 각 자릿수를 모두 리스트의 요소로 만들어주면 쉽게 구할 수 있다.

 

s=list(map(int, str(n)))​
 
 
그리고 연속된 값의 차이가 모두 같은지 확인하기 위해서 파이썬의 set(집합)을 사용했다.
 
집합은 중복된 값을 허용하지 않으므로 모든 연속된 값의 차이를 set에 넣고 set의 길이가 1이라면 모두 같다는 것을 의미한다.
cnt=0
def hans(n):
    global cnt #전역 변수 선언
    s=list(map(int, str(n)))
    if len(s)<=2: #두 자리수, 한 자리수는 모두 한수
        cnt+=1
        return 0
    se=set()
    for i in range(len(s)-1):
        se.add(s[i+1]-s[i]) #일단 집합에 공차를 모두 넣기
    if len(se)==1: #집합의 특성 상 중복이 존재하지 않으므로 길이가 1이면 공차가 모두 같음
        cnt+=1

n=int(input())
for i in range(1,n+1):
    hans(i)
print(cnt)
 

 

728x90
반응형

댓글