마음만은 새내기

항상 초심을 잃지 않고 생활하겠습니다~!

프로그래밍/Baekjoon Online Judge

BOJ 1065번(한수) 문제 풀이

동동매니저 2019. 2. 10. 10:54

★ solved.ac 난이도 : S4

(2021년 12월 29일 기준)


[문제 링크]

 

1065번: 한수

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

www.acmicpc.net


[문제 분석]

(문제에서) 한수의 개념을 파악하고, 조건에 맞는지 파악하는 문제


[풀이]

먼저, '한수'의 개념을 정확히 파악하셔야 합니다.

 

{정의}

양의 정수 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자리 수의 개수)


[소스 코드]

만약 틀린 부분이 있다면 지적 부탁드릴게요~! (댓글 환영!!)