BOJ-Algorithm

백준 1065번 - 한수

bellhundred 2022. 1. 9. 01:10

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

 

1065번: 한수

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

www.acmicpc.net

n = int(input())
arr = [i for i in range(1, n+1)]
count = 0
for num in arr:
    text = str(num)
    flag = True
    if len(text)<2:
        flag = True
    else:
        diff = int(text[0])-int(text[1])
        for j in range(1, len(text)):
            if diff!=int(text[j-1])-int(text[j]):
                flag = False
    count += flag
print(count)

arr에 1부터 n을 포함한 범위까지의 수 리스트를 만들어 주고

각 숫자별로 숫자를 우선 텍스트화 시킨 뒤, 이 수가 한수인지 아닌지를 구별해주는 flag를 생성한다.

일단 숫자가 한 자리면 무조건 한수이므로, 길이가 2보다 작은 텍스화된 수는 한수 처리한다.

그 외에는 우선 맨 앞자리와 그 다음자리의 수의 차를 diff로 설정한 뒤에, 해당 diff와 숫자의 차이가 같지 않다면 등차수열이 아니므로 한수가 아니게 된다. 이 경우 flag를 false로 변경한다.

count에 True를 더하면 +1이 되고, false를 더하면 +0이 되어 반복문이 완료되었을 때 True의 수를 파악할 수 있다.

 

이후 count를 출력한다.