알고리즘

백준 1951번 활자 (JAVA)

박카스마시며코딩 2023. 10. 23. 20:50

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

 

1951번: 활자

옛날에는 책을 만들 때, 한글자 한글자를 나눠서 활자를 만들어서 그걸 합쳐서 책을 만들었다고 한다. 예를 들면 가나다라는 글씨를 쓰기 위해서는 3개의 활자가 필요할 것이다. 그렇다고 할 때,

www.acmicpc.net

 

저는 구현을 통해 문제를 해결하였습니다.

1~9 : 1

10 ~ 99 : 2

...

이렇게 되기에 각 구간을 나눠 개수와 해당 길이만큼 결과값을 더하여 문제를 해결하였습니다.

 

package BOJ.etc;

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

public class BOJ_1951 {
    private static final int LIMIT = 1234567;
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        long result = 0;
        int length = getLength(n);
        while(n >= 10){
            result += (n - Math.pow(10,length-1) + 1) * length;
            n = (int)Math.pow(10,length-1) - 1;
            length--;
        }
        result += n;
        result %= LIMIT;
        System.out.println(result);
    }

    private static int getLength(int n) {
        int length = 0;
        while(n > 0){
            length++;
            n /= 10;
        }
        return length;
    }
}