본문 바로가기
백준

[백준]1065. 한수 (파이썬, python)

by 장인이 2021. 11. 17.

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

 

1065번: 한수

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

www.acmicpc.net

1. 문제 분석

 먼저 문제를 분석해보자.

1. 각 자리가 등차수열을 이루는 양의 정수 '한수'라고 정의한다.

2. N이 주어지면, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수 출력해라.

 

2. 문제 해결 방향

 이 문제의 핵심은 해당 수가 '한수'인지, 아닌지를 구별하는 방법을 만들어내는 것이다. 우선 각 자리가 등차수열을 이루면 참이므로, 1~9, 10~99는 모두 한수가 될 수 밖에 없다. 따라서

 

1) 1~99는 모두 한수이다.

(55는 0만큼 커지는 등차수열, 24는 2만큼 커지는 등차수열, ...)

 

 그리고 문제를 보면 1000보다 작거나 같은 수 N이 주어진다고 적혀있다. 따라서 우리는 100~999까지의 수만 판별하면 된다. 따라서

 

2) 100~999의 수는 직접 등차를 비교해보자

 

이렇게 2가지로 나누어서 풀면, 해답이 나올 것 같다.

 

3. 코드

(설명은 주석 참고)

# 한수

num = int(input())
counter = 0 # 한수 개수 저장할 카운터

for i in range(1, num+1):
    # 100보다 작은 수는 항상 등차수열이다.
    if i < 100:
        counter += 1
    else:
        # 각 자리마다 하나의 값으로 분리한다.
        temp = [int(k) for k in str(i)]
        # 십의자리-일의자리 == 백의자리-십의자리면 한수
        if temp[1]-temp[0] == temp[2]-temp[1]:
            counter += 1

print(counter)

 

문제 코드는 github에 올려두었다.

https://github.com/imgzon3/algorithm/blob/main/1_%EB%B0%B1%EC%A4%80/2_%EB%AC%B8%EC%A0%9C_1/1065.py

 

GitHub - imgzon3/algorithm: 코딩 테스트 연습

코딩 테스트 연습. Contribute to imgzon3/algorithm development by creating an account on GitHub.

github.com

 

댓글