알고리즘
백준 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;
}
}