Sunny's Coding Diary

자바[JAVA] - 백준 1065번 한수 본문

JAVA

자바[JAVA] - 백준 1065번 한수

Sunny._. 2023. 2. 4. 17:51

이번에 풀어본 문제는 백준 1065번 한수구하기이다.

 

[문제]

정수 X의 각자리를 나누어 그 수들이 등차수열을 이룬다면 그 수는 '한수'이다.어떤 수 n을 입력받아 그 수에 한수가 몇개 존재하는지 구하는 문제이다.

 

간단하게 문제를 풀이 하자면 어떤 수를 입력받아 자리수를 나누어 나눈 수들이 일정한 덧샘 & 뺄샘이 존재하는 등차수열인지 확인하는 문제이다.

 

문제에 해당하는 소스코드는 다음과 같다.

 

[소스코드]

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

//백준 한수구하기
public class M1065 {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int n = 0;
        int[] num = new int[3];
        int count = 0;
        int total = 0;
        float d;

        //정수 입력
        n = Integer.parseInt(bf.readLine());

        //한수 구하기
        for(int i = 1;i <= n;i++) {
            if(i < 100)        count++;
            if(i >= 100) {
                total = i;
                for(int j = 0;j < 3;j++) {
                    num[j] = total % 10;
                    total /= 10;
                }
                d = ((num[0] - num[2]) / 2.0F);

                if(num[1] + d == num[0]) {
                    count++;
                }
                if(i == 1000) count -= 1;
            }
        }

        //한수 출력
        System.out.print(count);
    }
}

 

[해석]

1. 어떤 수 n을 입력받는다. 그리고 100 미만인 수들은 다 등차수열이다. (한 자리 수는 그 존재로만 하나의 수열이라고 볼 수 있고 두자리 수는 그 두 수의 공차가 반드시 존재하는 수들이기 때문에 100미만의 수들은 모두 등차수열이다.)

ex) 10 ----> 1, 0  공차: -1   /  11 -------> 1, 1 공차: 0  ......

 

2. 100이상인 수들은 한수인지 확인해줘야한다. 그렇기 때문에 자릿수들을 때어서 한자리 수로 만들어준다.

(num 배열로 저장한다.)

 

3. 저장했다면 공차구하는 공식을 사용하여 공차 d를 구해준다.

 

4. 공차를 구했다면 num 배열 1번 인덱스의 값과 공차를 더해서 수열의 마지막항(num[2])과 비교한다. 비교했을 때 동일하다면 한수이다.

 

5. n이 1000일 경우 공차는 -0.5라고 나오지만 정수형으로 계산했을 땐 0으로 인식한다. 따라서 num[1]과 num[2]이 동일하다고 나오기 때문에 결과값에서 1을 빼준다.

 

[해결]

 

[꿈은 크게 가져라, 부서져도 그 조각이 크게]

Comments