알고리즘 문제들 으악/백준

[python]1065번 내가 한 풀이

빈나 2022. 3. 24. 22:28
반응형

1065의 내 풀이는 이렇다

def Han(a):
    a = str(a)
    if len(a) ==1:
        return 1
    b = []
    for i in range(len(a)-1):
        b.append(int(a[i+1])-int(a[i]))
    b = set(b)
    if len(b) ==1:
        return 1
    else:
        return 0
n = 0
i = int(input())
for l in range(1,i+1):
    n += Han(l)
print(n)

내가 생각한 방법은, 등차수열로 숫자가 이루어져있다면 각 자리수 차가 똑같은 것을 이용해 

각 자리수 차 종류가 하나인 것을 한수로 정의했다.

그래서 자릿수 접근에 이용하게 문자열로 숫자를 변환한후에 b라는 리스트를 만들어 각 자리수차 종류를 b에다가 집어넣었다.

한수라면 각 자리수 차의 종류는 한가지로 중복으로 b에 쌓여있을 것이다. 그래서 set()로 변환해 중복을 없애주어

b의 값을 1개로 만들었다.

그렇게 만들어진 값이 1개라면 1을 리턴하여 n 갯수에 반영했다.

 

부족한 풀이할 때 겪은 실수는 str로 변환했을 때 문자열 각 자리는 int라고 착각을 해버렸다. 리스트처럼,

리스트 전체의 타입은 리스트지만 각 자리는 int라는 걸 str도 그렇다고 무의식적으로 생각해서 a[i+1]-a[i] 그냥 이렇게 넣었다가 해멨다.

반응형