안녕하세요!
백준 단계별로 풀어보기 6단계에 위치한 '함수'의 1065번 한수 문제를 풀어봤습니다.
1065번 한수의 링크입니다
https://www.acmicpc.net/problem/1065
1065번: 한수
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나
www.acmicpc.net
문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
처음에 문제를 보고나서, 문제를 이해하는데 많은 시간이 걸렸습니다. 오랜 시간을 고민하다가, 각 자리수마다 따로 분류해서 봐야되는게 핵심이라는 것을 파악했습니다.
예를 들어 한수의 예제 중 첫번째 예시인 110을 입력받았다면 110보다 이하인 1, 2, 3, 4, 5, 6, 7, 8, 9(한자리수)는 모두 이어지는 등차수열이고, 뿐만 아니라 10~99(두자리수)도 모두 이어지는 등차수열임을 확인할 수 있었습니다. 이후 3자리수(ex 100~110)에 대해 등차수열임을 확인하는 작업이 필요했습니다.
3자리 수의 등차수열 예시로는 다음과 같습니다. 111은 공차가 0인 등차수열, 123은 공차가 1인 등차수열입니다.
여기서 공차란, 두항에 대해 공통적으로 나타나는 차이를 뜻합니다.
자바 코드로 옮겨보겠습니다.
먼저 사용자로부터 값을 입력받기 위해 BufferedReader클래스를 사용하였고, 입력받은 값의 토큰을 분리하기 위한 StringTokenizer클래스를 사용했습니다.
이후, 입력받은 값의 길이가 2보다 작거나 3보다 작으면, 모두 등차수열이기 때문에 그대로 입력받은 값을 반환했습니다.
만약, 입력받은 숫자의 길이가 4보다 작거나 같으면 각 자리를 분리해서 등차수열임을 확인했습니다.
등차수열임을 확인하는 과정에서는 3개의 숫자에서 공차가 5이상일순 없기 때문에 for문에서 4까지 공차를 체크했습니다.
등차수열임을 확인한 이후 기존 2자리, 3자리의 개수인 변수 count에 더해 반환했습니다.
맞은 모습을 확인할 수 있습니다. 이상 백준 한수 문제풀이였습니다!
'Dev > BOJ' 카테고리의 다른 글
[백준]1018번: 체스판 다시 칠하기 문제풀이(자바/JAVA) (0) | 2022.01.12 |
---|---|
[백준]7568번: 덩치 문제풀이(자바/JAVA) (0) | 2022.01.11 |
[백준]1316번: 그룹 단어 체커 문제풀이 (자바/JAVA) (0) | 2022.01.04 |