코딩테스트/BOJ

[백준] [구현] 1065. 한수

박소민 2023. 4. 26. 10:14
1065. 한수
 

1065번: 한수

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

www.acmicpc.net

 

  • 내 풀이
#11,22,..
#2자리수 다되고 1~99
#111,123, 135, 147,159, 210(-1)
from collections import deque

n=int(input())
if n<100:
    lst=set([i for i in range(1,n+1)])
else:
    lst = set([i for i in range(1, 100)])

k=100
while k<=n:
    l = len(str(k))
    strk=list(str(k))
    minusk=list(str(k))
    for j in range(5):
        flag=1
        for i in range(l-1):
            strk[i+1]=str(int(strk[i])+j)
            if int(minusk[i]) - j <0:
                flag=0
            minusk[i + 1] = str(int(minusk[i]) - j)
        intk=int(''.join(strk))
        if intk<=n and intk not in lst:
            lst.add(intk)
        if flag==0: continue
        intk2 = int(''.join(minusk))
        if intk2<=n and intk2 not in lst:
            lst.add(intk2)


    k+=10**(l-1)

print(len(lst))

 

  • 다른 사람 풀이
    • 1에서 n까지 전부 확인
    • 각 자리수가 등차수열인지 확인
      • n이 1000 미만이니까 3자리만 확인하면 됨
      • num_list[0]-num_list[1] == num_list[1]-num_list[2]
num = int(input())

hansu = 0
for i in range(1, num+1):
    num_list = list(map(int, str(i)))
    if i < 100:
        hansu += 1  # 100보다 작으면 모두 한수
    elif num_list[0]-num_list[1] == num_list[1]-num_list[2]:
        hansu += 1  # x의 각 자리가 등차수열이면 한수
print(hansu)