본문 바로가기
Baekjoon/[4] 브루트 포스

[백준] 1065번 한수 JAVA (자바) 풀이

by Poorm 푸름 2024. 4. 10.

문제 1065 

  • 한수 = 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다

     
  • 등차수열 = 연속된 두 개의 수의 차이가 일정한 수열 
    예)  [ 1, 1, 1 ] , [ 1, 2, 3 ] , [ 1, 3, 5 ], 등

  • 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력

 

[입력]

 

 :  첫 번째 줄 1,000보다 작거나 같은 자연수 N

 

 

 [출력]


 :  1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력

 

     

 

 

 [참고]

 

1. 일의 자리 숫자 / 십의 자리 숫자는 무조건 한수이다 (1~99까지는 한수 99개)

 

  • 1의 자리 숫자
    자릿수가 1개 뿐이라 비교될 숫자가 없어서 그 자체로 수열

    ex) 1 즉 한수이다 ( 공차 없음 )
  • 10의 자리 숫자
    자릿수가 2개 뿐이라 어차피 비교 대상은 하나이기 때문에 일정한 공차를 가진다

    ex) 16 ▶ 한수 ( 공차 = 5 ), 98 ▶ 한수 ( 공차 = -1 )

 

2. 백의 자리 숫자부터 계산할 것

 

  • 100의 자리라면?

    - 공차 범위
    : - 4 ~ 4


    - 범위가 1000까지인데 1000은 한수가 아니므로 111 ~ 999까지 검사하면 된다

 

 [코드]

import java.util.*;
import java.io.*;
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());
        if(n>=100){
            if(n==1000){
                n = 999;
            }
            int count = 99;
            for(int i =100; i<= n; i++){
                int hundred = i/100;
                int ten = (i/10)%10;
                int one = i%10;
            
                if(hundred - ten == ten - one)
                    count++;
            }
            System.out.println(count);
        }
        else
            System.out.println(n);
    }
}

 

 

 [해설]
     

 :  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        

 :  int n = Integer.parseInt(br.readLine()); 첫번째줄 입력
     

 :  if(n>=100){  100의 자리 이상 수라면


          if(n==1000){  1000일 경우 1000은 한수가 아니므로 999로 생각하고 진행할 것
              n = 999;
          }


          int count = 99;  10의 자리까지는 한수 개수 99
          for(int i =100; i<= n; i++){
              int hundred = i/100  100의 자리 숫자

              int ten = (i/10)%10;  10의 자리 숫자

              int one = i%10;  1의 자리 숫자
            
              if(hundred - ten == ten - one)  연속되는 숫자의 공차가 서로 같다면 한수 카운트
                   count++;
         }

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

 :  else
         System.out.println(n);  숫자가 100 미만이면 n 출력
    
 

 

 

이제 풀어보러 갈께요 :)



 

* 독학으로 익히는 코딩이라 틀린 것이 있을 수 있습니다. 오류가 있다면 댓글을 통해 알려주세요. 감사합니다. *

 

 

 

https://www.acmicpc.net/problem/1065

 

1065번: 한수

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나

www.acmicpc.net