개발 지식/알고리즘

[백준 알고리즘 1065] 한수 구하기 (Python)

Prcnsi 2022. 5. 27. 09:45
728x90

문제

문제는 입력받은 수보다 작은 한수를 출력하는 것이다. 한 수는 각각의 자릿수가 등차수열을 이루는 수로 3번째 자리부터 이에 해당한다. 왜냐하면 최소 세 개의 자리가 있어야 차가 동일(등차)한 지 확인할 수 있기 때문이다.

그래서 1~99까지는 무조건 한수이고 이후 100~999까지 한 수를 구하는게 목표다. 

 

 

풀이

그래서 반복문 1개를 통해 우선 1000이하인 한수의 리스트를 구하고 다음 반복문에서 입력받은 수 보다 작은 한수를 출력했다. 근데 다른 코드를 보니까 미리 한수 리스트를 안 구하고 수를 입력받은 뒤 바로 그 수보다 작은 수에 대해 반복문을 돌리면서 한수를 구한 뒤 그 개수를 출력했다. 그래서 미리 리스트를 구하는 것은 지난 self number처럼 모수의 리스트가 많은 경우에만 사용하는게 좋을 듯하다.

 

 

코드

# -*- coding: utf-8 -*-
# 전체 숫자 집합 생성
all_num=list(range(100,1000))
one_num=list(range(100))
result_num=[]

# 한 수를 구하고
for num in all_num:
    num=str(num)
    if int(num[2])-int(num[1])==int(num[1])-int(num[0]):
        one_num.append(int(num))

a=int(input()) # 값을 입력 받아서

for i in range(1,len(one_num)): # 한 수를 반복문 돌면서 a 이하의 한수 저장
    if a>=one_num[i]:
        result_num.append(one_num[i])

print(len(result_num))
728x90