1065번 - 한수
1. 문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
- Input
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
- Output
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
2. 사용 알고리즘
3. 풀이
자연수 N
자연수 $N$은 $1000$ 보다 작거나 같으므로 수열의 항은 최대 4개이다.
- $N < 100$
- $N$은 한 자리 수 혹은 두 자리 수 이므로, 모든 경우에서 등차수열의 특징을 만족한다.
- $N ≥ 100$
- $N$이 3자리 수 일 때, 백의 자리 숫자 와 일의 자리 숫자 의 합은 십의 자리 숫자 의 두 배와 같은 경우에 한하여 등차수열이다.
- $N$이 4자리 수 일 때, $N = 1000$ 의 경우 밖에 없고, 등차수열이 아니다.
Key point
- 항이 두 개 이하인 수열 은 항상 등차수열이다.
- 항이 세 개인 등차수열 $a_n$에 대해 $2 a_1 = a_0 + a_2$를 만족한다.
4. 제출 코드
맞았습니다!!
def isHan(num):
l = list(map(int, str(num)))
if len(l) < 3: return True
return l[1] * 2 == l[0] + l[2]
cnt = 0
for i in range(int(input())):
if isHan(i + 1): cnt += 1
print(cnt)
위 코드에서는 특정 숫자 num
에 대해 한수 여부를 반환하는 isHan(num)
함수를 정의하였다.
4.1. 쓰인 테크닉
str(num)
정수 자료형 값(num
)을 문자열 자료형으로 변환한다.- ex)
123
→'123'
- ex)
list(map(int, str(num)))
문자열 값(str(num)
)을 정수 리스트로 변환한다.- ex)
'123'
→[1, 2, 3]
* 단,list(str(num))
과 같이 구현했다면['1', '2', '3']
이 되었을텐데 이는 원하는 결과가 아니다.
- ex)
728x90
'Computer Science > Baekjoon' 카테고리의 다른 글
[Baekjoon] 1068번 트리 G5 (0) | 2024.01.15 |
---|---|
[Baekjoon] 1193번 분수찾기 S5 <Short> (0) | 2023.12.22 |
[Baekjoon] 2839번 설탕 배달 B1 <Short> (0) | 2023.11.12 |
[Baekjoon] 2292번 벌집 B2 <Short> (0) | 2023.10.22 |
[Baekjoon] 2096번 내려가기 G5 (0) | 2023.09.23 |