https://www.acmicpc.net/problem/1790
문제
1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.
1234567891011121314151617181920212223...
이렇게 만들어진 새로운 수에서, 앞에서 k번째 자리 숫자가 어떤 숫자인지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N(1 ≤ N ≤ 100,000,000)과, k(1 ≤ k ≤ 1,000,000,000)가 주어진다. N과 k 사이에는 공백이 하나 이상 있다.
출력
첫째 줄에 앞에서 k번째 자리 숫자를 출력한다. 수의 길이가 k보다 작아서 k번째 자리 숫자가 없는 경우는 -1을 출력한다.
풀이
K를 '몇 번째 수', '몇 번째 위치'인지 변환하여 생각한다. Integer overflow가 발생할 수 있기에 예외 처리 시 조심한다.
코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int K = sc.nextInt();
int base = 1;
while (K - 9*((int) Math.pow(10, base-1))*base > 0) {
if (base > 8) {
break;
}
K -= (int) Math.pow(10, base-1) * base * 9;
base++;
}
int M = ((int) Math.pow(10, base-1)) + (K-1) / base;
if (N < M) {
System.out.println(-1);
return;
}
String strM = M+"";
System.out.println(strM.charAt((K-1)%base));
}
}
'PS > Math' 카테고리의 다른 글
백준 9082번: 지뢰찾기 (JAVA) (0) | 2022.06.08 |
---|---|
백준 3343번: 장미 (JAVA) (0) | 2022.06.02 |
백준 24553번: 팰린드롬 게임 (0) | 2022.03.02 |
백준 15824번: 너 봄에는 캡사이신이 맛있단다 (JAVA) (0) | 2022.02.22 |
백준 1990번: 소수인팰린드롬 (JAVA) (0) | 2022.02.14 |