티스토리 뷰

반응형

백준 1065번 한수

 

알고리즘 분류: 브루트포스 알고리즘

 

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

 

 

1065번: 한수

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

www.acmicpc.net

문제

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

입력

첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.

출력

첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.

 

문제 파악

 

이 문제는 일단 한수가 무엇인지를 알아야 한다.

 

한수는 각 자리수가 등차수열을 이루고 있는 수를 한수라 한다.

 

예를 들면, 123이라는 숫자는 등차가 1인 등차수열을 가진 한수이다.

 

여기서 주의해야 할점은 그렇다면 자리수가 하나이거나 둘인 숫자들은 어떻게 되냐하면

 

그 수들도 모두 한수라고 봐야한다.

 

예를 들어서, 38이라는 숫자가 있다치면 등차가 5인 등차수열로 보는것이다.

 

 

코드

 

일단 코드를 보자면 두가지 경우로 나눠서 풀었다.

 

입력값인 n이 두자리 수이거나 한자리 수일경우 1부터 n 까지의 수 모두 한수가 되기 때문에

 

이 경우의 한수는 n이다.

 

이 외의 경우는 n이 1000보다 작거나 같은 자연수로 주어지는데 1000은 한수가 아니기 때문에

 

사실상 3자리 숫자라고 가정을 하고 풀었다.

 

n이 3자리가 되는 순간 이미 한수를 99개 가지고 시작하기 때문에 한수를 새로 99로 초기화 시키고 풀었다.

 

100부터 n까지 각 자리수가 등차수열을 이루는지 확인하기 위해서

 

(첫번째 자리수 - 두번째 자리수) == (두번째 자리수 - 세번째 자리수)를 확인하였고

 

등차수열을 이룬다면 한수를 한개씩 늘려주었다.

 

마지막으로 반복문이 끝나면 한수의 개수를 출력해주면 된다.

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함