티스토리 뷰

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

 

1790번: 수 이어 쓰기 2

첫째 줄에 N(1 ≤ N ≤ 100,000,000)과, k(1 ≤ k ≤ 1,000,000,000)가 주어진다. N과 k 사이에는 공백이 하나 이상 있다.

www.acmicpc.net

문제

1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.

1234567891011121314151617181920212223...

이렇게 만들어진 새로운 수에서, 앞에서 k번째 자리 숫자가 어떤 숫자인지 구하는 프로그램을 작성하시오.

코드

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(st.nextToken()), k = Integer.parseInt(st.nextToken());

        long count = 9, length = 1, target = 0;

        while (k > count * length) {
            k -= length * count;
            target += count;
            length++;
            count *= 10;
        }

        target = target + 1 + (k - 1) / length;

        if (target > n) bw.write(String.valueOf(-1));
        else bw.write(String.valueOf(target).charAt((int) ((k - 1) % length)));
        bw.flush();
    }
}

풀이

자릿수가 1일 때는 숫자가 9개고 문자열 길이가 9이다. 자릿수가 2가 되면 숫자는 90 개고 문자열 길이 90 * 2 가 된다. 또한 3일 때는 900 과 900 * 3이다. 이를 활용하면서 원하는 자릿 수의 숫자 중에서도 몇번째 숫자의 몇자릿수를 구하면 되는지 연산하여 출력한다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함