1065번: 한수
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나
www.acmicpc.net
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
이번 문제는 문제는 어렵지 않았는데, 문제 자체를 이해하는데 힘들었다. 구글링을 해보니 나뿐만 아니라 헷갈려하는 사람이 여럿 있었다. 이 문제는 주어진 경우에 대해 모두 결과를 내야하므로 완전 탐색 유형의 문제이다.
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.*; public class Main2 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int n = Integer.parseInt(br.readLine()); int totalCount = 0; for(int i=n; i>=1; i--) { if(n<10) { totalCount = n; break; } if(n>=10 && n<=99) { totalCount = n; break; } if(i<=99) { totalCount += 99; break; } String[] str = String.valueOf(i).split(""); int[] box = new int[str.length]; for(int j=0; j<str.length; j++) { box[j] = Integer.parseInt(str[j]); } int a, b, c; //4자리 = 1000 if(str.length == 4) { a = box[1]-box[0]; b = box[2]-box[1]; c = box[1]-box[0]; if(a==b && b==c) { totalCount++; } } if(str.length == 3) { a = box[1]-box[0]; b = box[2]-box[1]; if(a==b) { totalCount++; } } } bw.write(String.valueOf(totalCount)); bw.flush(); bw.close(); } }
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.