[python] 백준 1065번 - 한수

희희구리·2023년 4월 20일
0

백준

목록 보기
8/21
post-thumbnail
post-custom-banner

문제

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

링크 참조

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

풀이 설명

조건에서 N은 1000이 최대인 자연수라고 한다.
즉 N은 3자리수에서 등차수열인지만 확인하면 된다.
2자리수나 1자리수는 공차에 대해 확인하기 어렵기 때문에 등차수열이라고 생각하면 된다.
따라서, N이 3자리수에서 몇 개의 등차수열을 이루는 지만 알면 된다.

코드

N = int(input())
answer = 0
count = 0

if len(str(N))<3:
    answer += N
else:                               #100에서 999인 경우
    answer += 99
    
    for i in range(100,N+1):        #100부터 N까지
        A = list(str(i))            
        if int(A[0])+int(A[2]) == (2*int(A[1])):
            count += 1
    answer += count

print(answer)

처음 조건문에서 바로 N이 몇 자리수인지 확인한다. 해당 경우는, 입력 받은 정수형을 문자형으로 바꾼 다음에 len 로 몇 자리인지 알아보면 된다.
그 다음, 2자리 수가 아니라면 해당 숫자만큼 answer에 더해주면 된다.

만약 N이 3자리수 이상이라면 99만큼을 더해주고 생각한다.
왜냐하면 2자리수까지는 1-99의 값이 있는데 해당 값들은 모두 등차수열을 이루기 때문에
99을 더해주고 시작하면 된다.

그 다음 100부터 N까지 등차수열인지 확인하면 된다.
3자리 수이기 때문에 해당 문자열을 list형으로 바꿔 각각의 자리수가 [0][1] [2] 위치에
오게 한다.
등차수열은 등차중항이라는 특성이 있기 때문에 가운데 값의 2배가 양 끝과 같은지를 보아
등차수열인지 확인한다.
만약, 등차수열이라면 count값을 올린 다음, 해당 만큼 answer에 더해준다.

참고로 최대값이 1000인데, 1000의 경우 등차수열이 아니기 때문에 크게 신경쓰지 않아도 된다.

💌

후기

재밌당

profile
beginner :>
post-custom-banner

0개의 댓글