Study/알고리즘

[백준] 1065번_한수

혤리 2020. 1. 15. 17:38

문제 링크 : https://www.acmicpc.net/problem/1065

 

1065번: 한수

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

www.acmicpc.net

n = int(input())

arr = [0] * (n+1)

for i in range(len(arr)):
    if 1<= i <= 99:
        arr[i] = 1
    elif 100<= i <= 999:
        hund = i // 100
        ten = i % 100 //10
        one = i % 100 % 10
        if (hund-ten) == (ten-one):
            arr[i] = 1

print(sum(arr))



처음에 떠오른건 배열로 만든거여서 이렇게 했지만 더 간단하게...

n = int(input())
count = 0
for i in range(1,n+1):
    if i<=99:
        count += 1
    elif 100<=i<=999:
        i = str(i)
        if (int(i[0])-int(i[1])) == (int(i[1])-int(i[2])):
            count+=1
print(count)

아니면

i = str(i)
        if (int(i[0])-int(i[1])) == (int(i[1])-int(i[2])):
            count+=1

이 부분 대신

new_i = list(map(int,str(i)))
	if (new_i[0]-new_i[1]) == (new_i[1]-new_i[2]):

로 바꿔줘도 된다. list(map)을 통해 자릿수 별로 떼어내어 리스트에 저장해주기 때문이다.