ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 1748번: 수 이어 쓰기1
    Algorithm/백준 알고리즘 2021. 7. 20. 11:39


    문제 설명

    • 1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.
    • 이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.
    1234567891011121314151617181920212223...

     

    입력

    • 첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.

     

    출력

    • 첫째 줄에 새로운 수의 자릿수를 출력한다.

     

    풀이

    1. length변수를 선언하여 i가 length와 일치할 경우 length * 10을 해준다. => 2자릿수, 3자릿수..
    2. 자릿수가 증가함에 따라 자릿수당 해당 숫자가 위치해야함으로 cnt를 1증가 시켜준다.
    3. 해당 자리만큼 temp에 cnt를 더해준다.

     

    코드

    /*
    <수 이어 쓰기1>
    - 1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.
    - 1234567891011121314...
    
    <문제 해결>
    - 1 ~ 9까지 해당 자리가 곧 숫자위치
    - 10 ~ 99까지 2자리당 한 숫자위치
    - 100 ~ 999까지 3자리당 한 숫자위치
    - 1000 ~ 9999까지 4자리당 한 숫자위치
    ...
    
    다시 1이 오는경우 자리수를 증가시켜 체크한다.
    */
    
    import java.util.*;
    
    class Main {  
      public static void main(String args[]) { 
    	  Scanner sc = new Scanner(System.in);
    	  int number = sc.nextInt();
    	  
    	  int cnt = 1; //자릿수를 count하기 위해 정의한 변수
    	  int temp = 0; //새로운 수의 자릿수
    	  int length = 10; //자리수를 증가하기 위해 설정
    
    	  for(int i = 1; i <= number; i++){
    		  if(i == length){
    			  cnt++;
    			  length = length * 10;
    		  }
    		  temp += cnt; //한자리수의 경우 1씩, 두자리수의 경우 2씩...
    	  }
    	  System.out.println(temp);
      } 
    }

    'Algorithm > 백준 알고리즘' 카테고리의 다른 글

    [JAVA] 3085번: 사탕 게임  (0) 2021.07.19
    [JAVA] 2309번: 일곱 난쟁이  (0) 2021.07.19
    [JAVA] 1929번: 소수 구하기  (0) 2021.07.18
    [JAVA] 17427번: 약수의 합2  (0) 2021.07.18
    [JAVA] 1935번: 후위 표기식2  (0) 2021.07.12

    댓글

[Everything's gonna be fine]