https://www.acmicpc.net/problem/1065
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
'백준' 카테고리의 다른 글
[백준]4673. 셀프 넘버 (파이썬, python) (0) | 2021.11.17 |
---|---|
[백준]10989. 수 정렬하기 3(카운팅 정렬) (0) | 2021.03.03 |
[백준]1436. 영화감독 숌 문제풀이 (파이썬, python) (0) | 2021.02.17 |
[백준]7568. 덩치 문제풀이 (파이썬, python) (0) | 2021.02.17 |
[백준]11729. 하노이 탑 이동 순서 문제풀이 (파이썬, python) (0) | 2021.02.14 |
댓글