[BOJ] 1065 한 수

[BOJ] 1065 한 수

문제 링크

한 수가 무엇인지 잘 정리가 되지 않아서 주석에 정리하면서 문제를 풀었다.

한수는 어떤 양의 정수 X의 각 자리가 등차수열을 이루는 수인데, 한 자리 수와 두 자리 수는 무조건 등차 수열을 이룬다고 볼 수 있다.

그리고 세 자리 수 부터 한 수인지 판단할 필요가 있었고, 첫 번째 자리와 두 번째 자리 수의 차가 계속해서 이어지는 지 판단하여 True Or False를 결정지었다.

이를 함수로 작성하니 함수로 작성하지 않을 때보다 직관적이고 가독성이 높아 보인다.

나의 풀이

#한수 : 어떤 양의 정수 X의 각 자리가 등차수열을 이룸
#등차 수열 : 연속된 두개의 수의 차이가 일정한 수열
# N이 주어졌을 때, 1<= 한수 <=N

# 1 -> 1
# 2 -> 2
# 3 -> 3
# 한자리는 다 한수네
# 10 -> 1 0
# 11 -> 1 1
# 12 -> 1 2
# 13 -> 1 3
# 두 수 간의 간격이기 떄문에 1~99까지는 걍 다 한수임
# 세 자리부터 의미가 생김

# 100 -> 1 0 0 X
# 101 -> 1 0 1 X

N = int(input())
count = 0

def d(num):
    num = str(num) #문자화
    d = 0

    if(len(num) < 3):
        return True
    else:
        for i in range(len(num)):
            if(i==1):
                d = int(num[i]) - int(num[i-1])
            if(i>=2):
                if(d != int(num[i]) - int(num[i-1])):
                    return False

    return True


for i in range(1, N+1):
  a = d(i)
  if(a == True):
    count += 1

print(count)

© 2021. All rights reserved.