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;
}
}
'알고리즘' 카테고리의 다른 글
백준 13302번 리조트 (JAVA) (0) | 2023.10.25 |
---|---|
백준 15624번 피보나치 수7 (JAVA) (1) | 2023.10.24 |
프로그래머스 수열과 구간 쿼리2(JAVA) (0) | 2023.10.22 |
백준 2312번 수 복원하기 (JAVA) (1) | 2023.10.21 |
백준 18243번 Small World Network (JAVA) (1) | 2023.10.20 |