- 백준 1790번: 수 이어 쓰기 2
- 문제
1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.
→ 1234567891011121314151617181920212223...
이렇게 만들어진 새로운 수에서, 앞에서 k번째 자리 숫자가 어떤 숫자인지 구하는 프로그램을 작성하시오.
- 입력
첫째 줄에 N(1 ≤ N ≤ 100,000,000)과, k(1 ≤ k ≤ 1,000,000,000)가 주어진다. N과 k 사이에는 공백이 하나 이상 있다.
- 출력
첫째 줄에 앞에서 k번째 자리 숫자를 출력한다. 수의 길이가 k보다 작아서 k번째 자리 숫자가 없는 경우는 -1을 출력한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_1790 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
long num = Long.parseLong(st.nextToken());
long k = Long.parseLong(st.nextToken());
long result = 0;
long cnt = 1;
long length = 10;
long tmp = k == 1 ? 1 : -1;
for(int i = 1 ; i <= num + 1 ; i++) {
if(result >= k) {
tmp = i - 1;
break;
}
if(i == length) {
cnt++;
length *= 10;
}
result += cnt;
}
if(tmp != -1) {
String str = tmp + "";
System.out.println(str.charAt((int)(str.length() - (result - k) - 1)));
} else {
System.out.println(-1);
}
}
}