이 문제는 n개의 수가 주어졌을 때 그 수 까지의 한수가 몇 개 인지 출력하는 알고리즘 이다.
한수와 수학의 등차수열에 관련해 이해하면 풀기 쉬운 알고리즘이다.
등차수열은 123 처럼 백이십삼 이 아닌 숫자 1, 2 ,3 으로 보면 편하다.
123라는 수는 1씩 증가하는 등차수열이다.
124는 첫째 자리 '1' 과 두번째 자리 '2' 는 1씩 증가하나 두번째 자리 '2'와 세번째 자리 '4' 는 2가 차이나므로 한수가 아니다.
1-9 는 길이가 1인 등차수열 이므로 모두 한수이고, 10-99 까지도 길이가 2인 등차수열이다. 10-99 인 경우는 양수, 음수의 공차가 나온다.
그러니 99까지는 한수가 99개 이다.
import java.io.*;
import java.util.*;
class Main {
public static void main(String args[]) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String n = br.readLine();
int result = 0;
int tmp[] = new int[3];
if(n.length() < 3){
result = Integer.parseInt(n);
}else{
result = 99;
for(int i=100; i<=Integer.parseInt(n); i++){
tmp[2] = i % 10;
tmp[1] = i / 10 % 10;
tmp[0] = i / 100;
int x = tmp[0] - tmp[1];
int y = tmp[1] - tmp[2];
if(x == y){
result++;
}
}
}
System.out.println(result);
}
}
BufferedReader로 n을 입력 받습니다.
결과값을 출력하기 위한 result를 선언하고, 숫자가 세자리일 경우의 배열을 만듭니다.
입력 받은 n 의 길이를 측정합니다. 그 길이가 3 미만일 경우 에는 위에 설명 했던 것 처럼 1-9 , 10-99 인 경우이므로
한수의 개수는 n개가 됩니다.
길이가 3이상 일 경우로 계산했지만 이 문제는 1000보다 작거나 같은 수이고 1000은 한수가 아니므로 배열의 크기는 3개면 충분합니다.
99까지 한수가 99개이니 i를 100부터 n까지 반복하며, result 를 99로 초기화 해줍니다.
그러고 첫째 자리수와 두번째 자리수, 세번째 자리수를 구해서 배열에 담습니다.
그 후 첫번째 자리수와 두번째 자리수를 빼서 나온 수와 두번째 수, 세번째 수를 빼서 나온 수가 같은지 계산합니다.
(공차를 구하는 것)
만약 그 수가 서로 같다면 공차가 같은 것이므로 등차수열이고 한수입니다. result 를 한개씩 더해줍니다.
결과값을 출력합니다.
'알고리즘 with JAVA' 카테고리의 다른 글
백준 11720번 숫자의합 - 자바 (0) | 2021.04.05 |
---|---|
백준 11654번 아스키코드 - 자바 (0) | 2021.04.04 |
백준 4673번 셀프넘버 - 실버5 난이도, 함수 (0) | 2021.04.01 |
백준 15596번 정수 N개의 합 (함수) (0) | 2021.03.31 |
백준 4344번 평균은 넘겠지 - BufferedReader, StringBuilder, StringToKenizer, String.format (0) | 2021.03.31 |