[백준 1019번 문제, JAVA] 책 페이지

2023. 3. 12. 00:42·이전 게시글/공부 관련

문제

지민이는 전체 페이지의 수가 N인 책이 하나 있다. 첫 페이지는 1 페이지이고, 마지막 페이지는 N 페이지이다. 각 숫자가 전체 페이지 번호에서 모두 몇 번 나오는지 구해보자.


코드

import java.io.*;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {
        final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int a = 1;
        int b = Integer.parseInt(br.readLine());
        int[] counts = new int[10];
        int digit = 1;

        while(a <= b) {
            if (b % 10 != 9) {
                calc(b, counts,digit);
                b--;
            }
            if (b < a) {
                break;
            }
            if (a % 10 != 0) {
                calc(a, counts, digit);
                a++;
            }
            if (a % 10 == 0 && b % 10 == 9) {
                for (int i = 0; i < 10; i++) {
                    counts[i] += (b / 10 - a / 10 + 1) * digit;
                }
                digit *= 10;
                a /= 10;
                b /= 10;
            }
        }
        Arrays.stream(counts).forEach(i->System.out.print(i + " "));
    }

    public static void calc(int n, int[] counts, int digit) {
        while (n > 0) {
            counts[n % 10] += digit;
            n /= 10;
        }
    }
}

해결

정신건강에 해끼치는 것을 싫어하는 사람은 쳐다보지말자
 
 


참고

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

Baekjoon Online Judge 1019번 풀이

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

www.slideshare.net

 
밑에 이거는 시간 초과나는 일일이 비교해서 카운팅하는 방법

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) throws IOException {
        final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        long input = Long.parseLong(br.readLine());
        List<Long> counts = new ArrayList<>(Collections.nCopies(10, 0L));

        for (long i = 1; i <= input; i++) {
            String[] tokens = String.valueOf(i).split("");
            for (String token : tokens) {
                counts.set((int)Long.parseLong(token), counts.get((int)Long.parseLong(token)) + 1L);
            }
        }
        StringBuilder sb = new StringBuilder();
        counts.forEach(i -> sb.append(i).append(" "));
        System.out.println(sb);
    }
}

 
 

저작자표시 (새창열림)

'이전 게시글 > 공부 관련' 카테고리의 다른 글

자료구조와 알고리즘 학습 노트 기초 (2) 재귀와 귀납적 사고  (0) 2023.03.12
[백준 1076번 문제, JAVA] 저항  (1) 2023.03.12
[백준 1057번 문제, JAVA] 토너먼트  (0) 2023.03.09
[백준 1032번 문제, JAVA] 명령 프롬프트  (0) 2023.03.08
프로그래밍 입문 학습 노트 (1)  (0) 2023.03.06
'이전 게시글/공부 관련' 카테고리의 다른 글
  • 자료구조와 알고리즘 학습 노트 기초 (2) 재귀와 귀납적 사고
  • [백준 1076번 문제, JAVA] 저항
  • [백준 1057번 문제, JAVA] 토너먼트
  • [백준 1032번 문제, JAVA] 명령 프롬프트
aptenia
aptenia
공부하면서 배운 것들
  • aptenia
    새벽의 아이디어
    aptenia
  • 전체
    오늘
    어제
    • 분류 전체보기 (276)
      • f1tenth (2)
      • 이전 게시글 (268)
        • 개발 관련 (25)
        • 정보 관련 (19)
        • 공부 관련 (224)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 네이버 블로그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준
    프로그래머스
    티스토리반응형2스킨편집
    파이어베이스
    컨텍스트스위칭
    빅데이터공모전
    마인크래프트
    공개SW개발자대회
    마인크래프트강화스크립트
    마인크래프트스크립트
    티스토리스킨편집
    프로그래머스PCCE
    C++강좌
    마크
    C언어
    티스토리HTML
    일본규슈공업대학교
    이것이자바다
    이것이자바다연습문제
    캡스톤디자인
    자바
    스크롤바CSS
    파이썬
    C언어강좌
    마크스크립트
    이것이자바다확인문제
    c언어초보
    반복하지않는수
    콜라츠추측
    안드로이드
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
aptenia
[백준 1019번 문제, JAVA] 책 페이지
상단으로

티스토리툴바