★ solved.ac 난이도 : S4
(2021년 12월 29일 기준)
[문제 링크]
[문제 분석]
(문제에서) 한수의 개념을 파악하고, 조건에 맞는지 파악하는 문제
[풀이]
먼저, '한수'의 개념을 정확히 파악하셔야 합니다.
{정의}
양의 정수 X에 대해서 각 자릿수가 등차수열을 이루는 수
여기에서는 N이 주어졌을 때, N 이하의 한수의 개수를 세는 문제입니다.
(여기에서 N의 범위는 1,000 이하입니다.)
여기에서 1,000은 한수가 아니므로 잠시 접어두시고,
1에서 999까지의 수만 생각해보겠습니다.
경우 1. 1자리 수(1~9)인 경우
자릿수가 하나이므로, 무조건 한수가 됩니다.
경우 2. 2자리 수(10~99)인 경우
자릿수가 2개이고, 연속된 두 수의 차(공차) 쌍이 하나이므로, 역시 무조건 한수가 됩니다.
경우 3. 3자리 수(100~999)인 경우
이 부분에서 생각을 하셔야합니다.
백의 자리, 십의 자리, 일의 자리를 각각 추출한 후, 이들이 등차수열을 이루는지 확인하면 됩니다.
알고리즘 (3자리)
(변수 정의)
a : 백의 자리
b : 십의 자리
c : 일의 자리
(공식)
(a-b == b-c)가 true면 한수
여기에서 눈치가 빠르신 분들께서는 아실지 모르겠지만...
입력으로 주어지는 수가 100 미만이라면, 그 수를 그대로 출력하시면 됩니다.
한자리 수와 두자리 수는 모두 한수이기 때문입니다.
단, 세자리 수가 주어지거나 1,000이 주어지면,
위의 알고리즘을 적용시키면 됩니다.
이 알고리즘에서는 3자리 수에 대해서만 계산을 하기 때문에,
개수를 세고 나서 99를 더해줘야 합니다.
(1자리 수의 개수 + 2자리 수의 개수)
[소스 코드]
만약 틀린 부분이 있다면 지적 부탁드릴게요~! (댓글 환영!!)