본문 바로가기

Programming/알고리즘

[백준] 1065 -JAVA[자바]

 

 

예제 입력 1, 2에서 볼 수 있듯

 

100미만의 수는 그 자체로 한수이다. 숫자가 1자리, 2자리는 그 자체로 등차수열이라고 할 수 있다.

 

결국 경우의 수를 따져봐야 하는 것은 100-1000의 숫자이다.

 

 

 

즉, 3자리의 숫자에 대한 한수 여부를 확인하면 되므로 (1000은 한수가 아니다)

백의 자리 숫자 : N / 100

십의 자리 숫자 : (N/10) % 10

일의 자리 숫자: N % 10 이고,

 

등차 수열의 경우

백의 자리 숫자를 X, 등차를 a라고 하면

백의 자리 숫자: X

십의 자리 숫자: X+a

일의 자리 숫자: X+2a이므로

 

(십의자리 숫자) *2 = (백의 자리 숫자) + (일의 자리 숫자) 의 관계를 갖고있다.

이를 식으로 표현하면, 

((N/10) % 10) *2 = (N/100) + (N%10) 을 만족하면 된다.

 

 

//한수 만들기
public static int hansu(int N){
    int count = 0;

    if (N < 100){
        return N;
    } else {
        count = 99;

        for (int i=100; i<= N; i++){
            int hund = i/100;
            int ten = (i/10)%10;
            int one = i%10;

            if ((hund + one) == (ten * 2)){
                count ++;
            }
        }
    }
    return count;
}

 

 

이 함수를 짜면 메인 로직은 건들것이 별로 없다.

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;

public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        System.out.print(hansu(N));
    }
    
    //한수 만들기
    public static int hansu(int N){
        int count = 0;
        
        if (N < 100){
            return N;
        } else {
            count = 99;
            
            for (int i=100; i<= N; i++){
                int hund = i/100;
                int ten = (i/10)%10;
                int one = i%10;
                
                if ((hund + one) == (ten * 2)){
                    count ++;
                }
            }
        }
        return count;
    }
}