본문 바로가기
  • 초부득3 - 어제보다 나은 내일을 위해
  • 꿈이 현실이 되는 날까지
카테고리 없음

[기초-구현] 백준 1065번 한수 with Python3

by 금의야행 2021. 8. 8.

https://www.acmicpc.net/problem/1065

 

1065번: 한수

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

www.acmicpc.net

문제

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

내 풀이

n = int(input())+1
alist = []
blist = []

for j in range(1, n):
    alist.append(j)

for i in range(len(alist)):
    char = list(str(alist[i]))

    if len(char) > 2:
        d = float(int(char[0]) - int(char[1]))
        d2 = float(int(char[1]) - int(char[2]))
        if d == d2:
            blist.append(alist[i])

    if 2 >= len(char):
        blist.append(alist[i])

print(len(blist))

해설

등차수열 an - an+1 = d 가 항상 성립하는 수열 , ex 123 d=1 , 111 d=0, 321 d=-1.

1의 자리와 10의 자리는 모두 등차수열이 성립되기에 100 이전엔 모두 등차수열이다.

 

 

정답 풀이

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)

출처:https://ooyoung.tistory.com/65

 

해석

큰 설명이 필요 없는듯.

댓글