본문 바로가기

Computer Science/알고리즘 문제풀이

Baek Joon _백준 1019> brute force > #49 책페이지

문제

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

 

1019번: 책 페이지

첫째 줄에 0이 총 몇 번 나오는지, 1이 총 몇 번 나오는지, ..., 9가 총 몇 번 나오는지를 출력한다.

www.acmicpc.net

지민이는 N쪽인 책이 한권 있다. 첫 페이지는 1쪽이고, 마지막 페이지는 N쪽이다. 각 숫자가 모두 몇 번이 나오는지 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.

출력

첫째 줄에 0이 총 몇 번 나오는지, 1이 총 몇 번 나오는지, ..., 9가 총 몇 번 나오는지를 출력한다.

 

2. 나의 코드

- 걍 이거 보고 풀었다.

- 하도 개 쌩노가다하다 겨우 풀었다.

https://www.slideshare.net/Baekjoon/baekjoon-online-judge-1019

 

Baekjoon Online Judge 1019번 풀이

https://www.acmicpc.net/problem/1019 "책 페이지" 문제 풀이입니다.

www.slideshare.net

 

import java.util.*;

class Main{
	static int [] arr = new int[10];
	static int point = 1;
	public static void main (String [] args){
		Scanner sc = new Scanner(System.in);
		int page = sc.nextInt();
		int start = 1;
		while(start <= page){
			while(start%10!=0 && start<=page){
				cal(start);
				start++;
			}
			if(page < start){
				break;
			}
			while(page%10!=9 && start<=page){
				cal(page);
				page--;
			}

			page/=10;
			start/=10;

			for(int i=0;i<10;i++){
				arr[i]+=(page-start+1)*point;
			}
			point*=10;
		}
	StringBuilder builder = new StringBuilder();
        for(int i=0;i<10;i++)
          builder.append(arr[i] + " ");
          
        System.out.println(builder.toString());
       }
	public static void cal(int num){
		while(num>0){
			arr[num%10]+=point;
			num/=10;
		}
	}
}