[๋ฐฑ์ค€] 1790 - ์ˆ˜ ์ด์–ด ์“ฐ๊ธฐ2

๋ฌธ์ œ

๋ฌธ์ œ ์„ค๋ช…

Baekjoon Online Judge - 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์„ ์ถœ๋ ฅํ•œ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

์ž…๋ ฅ ์ถœ๋ ฅ
20 23 6

ํ’€์ด

ํ•ด์„ค

  1. 1๋ถ€ํ„ฐ N๊นŒ์ง€ ์ˆ˜๋ฅผ ์ด์–ด์ ์–ด ๋งŒ๋“  ์ˆ˜์˜ ๊ธธ์ด(์ˆซ์ž ๊ฐœ์ˆ˜)๋ฅผ ๊ตฌํ•œ ๋’ค k์™€ ๋น„๊ตํ•˜์—ฌ ์˜ˆ์™ธ์ฒ˜๋ฆฌ
  2. ์•ž์—์„œ๋ถ€ํ„ฐ k๋ฒˆ์งธ ์ž๋ฆฌ ์ˆซ์ž์˜ ์‹ค์ œ ์ˆ˜ ๊ตฌํ•˜๊ธฐ

    1. ์•ž์—์„œ๋ถ€ํ„ฐ k๋ฒˆ์งธ ์ž๋ฆฌ ์ˆซ์ž๊ฐ€ ์†ํ•œ ์ˆ˜ ๊ตฌํ•˜๊ธฐ
    2. 2-i์—์„œ ๊ตฌํ•œ ์ˆ˜์˜ ๋ช‡๋ฒˆ์งธ ์ž๋ฆฌ ์ˆซ์ž์ธ์ง€ ๊ตฌํ•˜๊ธฐ(์ตœ์ข… ์ถœ๋ ฅ ๊ฐ’)

1-1. ์ž๋ฆฌ์ˆ˜ ๋ณ„ ์ˆซ์ž ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ

Accumulation Index Sum

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 1๋ถ€ํ„ฐ ๋‚˜์—ด๋œ ์ˆ˜๋“ค์˜ ๋ชจ์ž„์—์„œ ํŠน์ • ์ˆซ์ž๊ฐ€ ๋ช‡ ๋ฒˆ์งธ ์ž๋ฆฌ์— ์œ„์น˜ํ•œ ์ˆซ์ž์ธ์ง€ ๊ทธ ๊ด€๊ณ„๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ์ˆซ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•˜๋Š”๋ฐ, ๊ฐ ์ˆ˜๋Š” ์ž์‹ ์˜ ์ž๋ฆฌ์ˆ˜๋งŒํผ์˜ ์ˆซ์ž๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๊ฐ ์ž๋ฆฌ์ˆ˜์— ์กด์žฌํ•˜๋Š” ์ˆ˜์˜ ๊ฐœ์ˆ˜์™€ ์ž๋ฆฌ์ˆ˜๋ฅผ ๊ณฑํ•˜๋ฉด ํ•ด๋‹น ์ž๋ฆฌ์ˆ˜์— ์†ํ•œ ์ˆ˜์˜ ์ „์ฒด ๊ธธ์ด๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ•œ ์ž๋ฆฌ ์ˆ˜(1~9)๋Š” 9๊ฐœ๊ฐ€ ์กด์žฌํ•˜๊ณ  ํ•œ ์ž๋ฆฌ ์ˆ˜์˜ ๋งˆ์ง€๋ง‰ ์ˆ˜์ธ 9์˜ ์ธ๋ฑ์Šค๋Š” 9
  • ๋‘ ์ž๋ฆฌ ์ˆ˜(10~99)๋Š” 180๊ฐœ๊ฐ€ ์กด์žฌํ•˜๊ณ  ๋‘ ์ž๋ฆฌ ์ˆ˜์˜ ๋งˆ์ง€๋ง‰ ์ˆ˜์ธ 99์˜ ์ธ๋ฑ์Šค๋Š” 189
  • ์„ธ ์ž๋ฆฌ ์ˆ˜(100~999)๋Š” 2700๊ฐœ๊ฐ€ ์กด์žฌํ•˜๊ณ  ์„ธ ์ž๋ฆฌ ์ˆ˜์˜ ๋งˆ์ง€๋ง‰ ์ˆ˜์ธ 999์˜ ์ธ๋ฑ์Šค๋Š” 2889
  • ๋„ค ์ž๋ฆฌ ์ˆ˜(1000~9999)๋Š” 36000๊ฐœ๊ฐ€ ์กด์žฌํ•˜๊ณ  ๋„ค ์ž๋ฆฌ ์ˆ˜์˜ ๋งˆ์ง€๋ง‰ ์ˆ˜์ธ 9999์˜ ์ธ๋ฑ์Šค๋Š” 38889

1-2. k์˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ

์œ„์˜ ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•˜์—ฌ 1๋ถ€ํ„ฐ N๊นŒ์ง€ ์ˆ˜๋ฅผ ์ด์–ด์ ์—ˆ์„ ๋•Œ ๋งŒ๋“ค์–ด์ง€๋Š” ์ˆ˜์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • N์˜ ์ž๋ฆฌ์ˆ˜๋ณด๋‹ค ํ•œ ์ž๋ฆฌ ์ž‘์€ ์ž๋ฆฌ์ˆ˜์˜ ๋งˆ์ง€๋ง‰ ์ˆ˜๊นŒ์ง€์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

    -> 20์€ ๋‘ ์ž๋ฆฌ์ˆ˜ ์ด๋ฏ€๋กœ ํ•œ ์ž๋ฆฌ์ˆ˜์˜ ๋งˆ์ง€๋ง‰ ์ˆ˜์ธ 9๊นŒ์ง€ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ•˜๋ฉด 9

  • ์ดํ›„์—๋Š” ํ˜„์žฌ ์ž๋ฆฌ์ˆ˜์˜ ์ˆ˜๋“ค ์ค‘ N์ด ๋ช‡๋ฒˆ์งธ ์ˆ˜์ธ์ง€ ๊ตฌํ•˜๊ณ  ๋‹ค์‹œ ์ž๋ฆฌ์ˆ˜๋ฅผ ๊ณฑํ•œ๋‹ค.

    -> ๋‘ ์ž๋ฆฌ ์ˆ˜๋“ค ์ค‘ 20๊นŒ์ง€๋Š” 11๊ฐœ์˜ ์ˆ˜๊ฐ€ ์กด์žฌํ•˜๊ณ , ๊ฐ ์ˆ˜๋“ค์€ ๋ชจ๋‘ 2์ž๋ฆฌ ์ˆ˜์ด๋ฏ€๋กœ 11 * 2 = 22

  • ์œ„์—์„œ ๊ตฌํ•œ ์ˆซ์ž ๊ฐœ์ˆ˜๋ฅผ ๋”ํ•˜๋ฉด ์ด ์ˆซ์ž ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค!

    -> 9 + 22 = 31

๋”ฐ๋ผ์„œ ์ˆ˜์˜ ๊ธธ์ด๋Š” ์ตœ๋Œ€ 31์„ ๋„˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ ์ž…๋ ฅ๋œ k๊ฐ€ 31 ์ด์ƒ์ผ ๊ฒฝ์šฐ -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  1. k๋ฒˆ์งธ ์ž๋ฆฌ ์ˆซ์ž ๊ตฌํ•˜๊ธฐ

Calculate Index Principle-picture

Calculate Index Principle-text


2-1. k๋ฒˆ์งธ ์ˆซ์ž๊ฐ€ ์†ํ•œ ์ˆ˜

์ตœ์ข… ๋ชฉํ‘œ์ธ k๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ๊ตฌํ•˜๊ธฐ์— ์•ž์„œ k๋ฒˆ์งธ ์ˆซ์ž๊ฐ€ ์†ํ•œ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฝ๋‹ค.

k๋ฒˆ์งธ์—์„œ k๋Š” ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ์œ„์น˜ ์ •๋ณด์ธ ์ธ๋ฑ์Šค๋ฅผ ์˜๋ฏธํ•˜๋ฏ€๋กœ 1)์—์„œ์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ž๋ฆฌ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.

๋‹จ, 1)์—์„œ๋Š” ์‹ค์ œ ์ˆ˜๊ฐ€ ๋ช‡ ๋ฒˆ์งธ์ธ์ง€ ์œ„์น˜(์ธ๋ฑ์Šค)๋ฅผ ๊ตฌํ–ˆ๋‹ค๋ฉด, ์ด๋ฒˆ์—๋Š” ๋ฐ˜๋Œ€๋กœ ์œ„์น˜(์ธ๋ฑ์Šค)๋ฅผ ํ†ตํ•ด ์‹ค์ œ ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์ž๋ฆฌ์ˆ˜ ๋ณ„ ๋งˆ์ง€๋ง‰ ์ˆ˜์˜ ์ธ๋ฑ์Šค๊ฐ€ ์•„๋‹Œ ์ˆ˜ ์ž์ฒด๋ฅผ ์ด์šฉํ•˜๊ณ  ์ž๋ฆฌ์ˆ˜ ๋‚˜๋ˆ„๊ธฐ ์—ฐ์‚ฐ์„ ํ•ด์•ผํ•œ๋‹ค.

  • k์˜ ์ž๋ฆฌ์ˆ˜๋ณด๋‹ค ํ•œ ์ž๋ฆฌ ์ž‘์€ ์ž๋ฆฌ์ˆ˜์˜ ๋งˆ์ง€๋ง‰ ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.

    -> 23์€ ๋‘ ์ž๋ฆฌ์ˆ˜ ์ด๋ฏ€๋กœ ํ•œ ์ž๋ฆฌ์ˆ˜์˜ ๋งˆ์ง€๋ง‰ ์ˆ˜์ธ 9

  • ์ดํ›„์—๋Š” ํ˜„์žฌ ์ž๋ฆฌ์ˆ˜์˜ ์ˆซ์ž๋“ค ์ค‘ k๊ฐ€ ๋ช‡๋ฒˆ์งธ ์ˆซ์ž์ธ์ง€ ๊ตฌํ•˜๊ณ  ์ž๋ฆฌ์ˆ˜๋กœ ๋‚˜๋ˆˆ๋‹ค.

    -> k๋Š” ๋‘ ์ž๋ฆฌ ์ˆ˜์˜ ์ˆซ์ž๋“ค ์ค‘ (23 - 9)๋ฒˆ์งธ์ด๊ณ  ๊ฐ ์ˆ˜๋“ค์€ ๋ชจ๋‘ 2์ž๋ฆฌ ์ˆ˜
    14 / 2 = 7(๋‘์ž๋ฆฌ ์ˆ˜๋“ค ์ค‘ 7๋ฒˆ์งธ ์ˆ˜)

  • ์œ„์—์„œ ๊ตฌํ•œ ์ˆ˜๋ฅผ ๋”ํ•˜๋ฉด k๊ฐ€ ์†ํ•œ ์ˆ˜์ธ 16์„ ๋„์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

2-2. k๋ฒˆ์งธ ์ˆซ์ž๊ฐ€ ์†ํ•œ ์ˆ˜์—์„œ ์ตœ์ข… ์ˆซ์ž ๊ตฌํ•˜๊ธฐ

์ด์ œ ๊ฑฐ์˜ ๋‹ค์™”๋‹ค!!๐Ÿ˜‚

k๋ฒˆ์งธ ์ˆซ์ž๊ฐ€ ์†ํ•œ ์ˆ˜์ธ 16์—์„œ์˜ ์œ„์น˜๋Š” 2-1)์—์„œ ํ•œ ๋‚˜๋ˆ„๊ธฐ ์—ฐ์‚ฐ์˜ ๋‚˜๋จธ์ง€๋ฅผ ๋ณด๋ฉด ๋œ๋‹ค.

  • ๋‚˜๋จธ์ง€๊ฐ€ 0์˜ ๊ฒฝ์šฐ : k๋ฒˆ์งธ ์ˆซ์ž๊ฐ€ ์†ํ•œ ์ˆ˜์˜ ์ž๋ฆฌ์ˆ˜๋ฒˆ์งธ ์ˆ˜๋ผ๋Š” ์˜๋ฏธ๋กœ ์ˆ˜์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์ˆซ์ž๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ
  • ๋‚˜๋จธ์ง€๊ฐ€ 1 ~ (k๋ฒˆ์งธ ์ˆซ์ž๊ฐ€ ์†ํ•œ ์ˆ˜์˜ ์ž๋ฆฌ์ˆ˜-1) ์‚ฌ์ด์˜ ๊ฐ’์ผ ๊ฒฝ์šฐ : k๋ฒˆ์งธ ์ˆซ์ž๊ฐ€ ์†ํ•œ ์ˆ˜์˜ ์ฒซ๋ฒˆ์งธ ์ˆซ์ž๋ถ€ํ„ฐ 1๋กœ ์ธ๋ฑ์‹ฑํ•˜์—ฌ ์ ‘๊ทผํ•ด์•ผ ํ•จ

์•„์šฐ ๊ธ€๋กœ ์“ฐ๋Š”๊ฒŒ ๋”ํž˜๋“ค๋‹ค.

์ฝ”๋“œ

Java
import java.util.Scanner;

public class Baekjoon1790 {
	static Integer n, k;
	static String N;
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		k = sc.nextInt();
		N = Integer.toString(n);
		findNumberLocation();
	}
	
	static void findNumberLocation() {
		int nPlace = N.length();   // n์˜ ์ž๋ฆฌ์ˆ˜
		int nDigits = 0;           // n๊นŒ์ง€ ์ด์–ด๋ถ™์ธ ์ˆ˜์˜ ์ „์ฒด ๊ธธ์ด(์ˆซ์ž ๊ฐœ์ˆ˜, ์ธ๋ฑ์Šค); k ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ๊ณ„์‚ฐ
        int underKPlace = 0;       // k๋ฒˆ์งธ ์ˆ˜์˜ ์ž๋ฆฟ์ˆ˜ - 1
		int underKDigits = 0;      // (k๋ฒˆ์งธ ์ˆ˜์˜ ์ž๋ฆฟ์ˆ˜ - 1)๊นŒ์ง€ ์ˆซ์ž ๊ฐœ์ˆ˜

		// (N์˜ ์ž๋ฆฌ์ˆ˜ - 1)๊นŒ์ง€ ์ˆซ์ž ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ(9๊ฐœ + 180๊ฐœ + 2700๊ฐœ ...)
		for (int place=1; place<nPlace; place++) {
			nDigits += (9 * (int) Math.pow(10, place-1) * place);

            // k๋ฒˆ์งธ ์ˆ˜๋ฅผ ์œ„ํ•ด (k๋ฒˆ์งธ ์ˆ˜์˜ ์ž๋ฆฌ์ˆ˜ - 1)๊นŒ์ง€์˜ ์ˆซ์ž ๊ฐœ์ˆ˜, ์ž๋ฆฌ์ˆ˜ ๊ธฐ์–ต
			if (k >= nDigits) {
				underKDigits = nDigits;
				underKPlace = place;
			}
		}

		// N์˜ ์ž๋ฆฌ์ˆ˜์— ํ•ด๋‹นํ•˜๋Š” ์ˆ˜๋“ค์˜ ์ˆซ์ž ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด ์ตœ์ข… nDigits ๊ณ„์‚ฐ
		nDigits += (n - (int)(Math.pow(10, nPlace-1) - 1)) * nPlace;

		// k๊ฐ€ 1๋ถ€ํ„ฐ n๊นŒ์ง€ ์ด์–ด๋ถ™์ธ ์ˆ˜์˜ ์ „์ฒด ๊ธธ์ด๋ฅผ ์ดˆ๊ณผํ•˜๋Š”์ง€ ์ฒดํฌ
		if (k > nDigits) {
			System.out.println(-1);
		} else {
			// k๋ฒˆ์งธ ์ˆ˜์˜ ์ž๋ฆฌ์ˆ˜์— ํ•ด๋‹นํ•˜๋Š” ์ˆ˜๋“ค์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด ์ตœ์ข… k๋ฒˆ์งธ ์ˆซ์ž ๊ตฌํ•˜๊ธฐ
			int q = (k - underKDigits) / (underKPlace + 1);   // ๋ชซ
            int r = (k - underKDigits) % (underKPlace + 1);   // ๋‚˜๋จธ์ง€
			Integer target = ((int) Math.pow(10, underKPlace) - 1) + q;
			if (r == 0) {
				System.out.println(Integer.toString(target).charAt(underKPlace));   // ์ˆ˜์˜ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค ์ ‘๊ทผ
			} else {
				System.out.println(Integer.toString(++target).charAt(--r));   // ๋‚˜๋จธ์ง€๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ target ๋‹ค์Œ ์ˆ˜์—์„œ ์ธ๋ฑ์‹ฑํ•˜์—ฌ ์ ‘๊ทผ
			}
		}
	}
}

๐Ÿ’ก

  • ์ˆ˜ํ•™ ๋ฌธ์ œ๋“ค์€ ํ’€๋‹ค๋ณด๋ฉด ๋ญ”๊ฐ€ ๊ฒธ์†ํ•ด์ง€๋Š” ๋Š๋‚Œโ€ฆใ…Žใ…Ž
  • ์ž๋ฆฌ์ˆ˜ ๋ณ„ ์ˆซ์ž ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ทœ์น™๋งŒ ์ฐพ์œผ๋ฉด ๊ทธ ๋‹ค์Œ์€ ๊ตฌํ˜„ ๋ฌธ์ œ~~
  • ํ’€์ด๋ฅผ ์ž์„ธํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๋‹ˆ๊นŒ ์‹œ๊ฐ„์€ ์˜ค๋ž˜๊ฑธ๋ฆฌ์ง€๋งŒ ํ™•์‹คํžˆ ๋จธ๋ฆฌ์—์„œ ์ •๋ฆฌ๊ฐ€ ๋œ๋‹ค.