[๋ฐฑ์ค] 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๋ถํฐ N๊น์ง ์๋ฅผ ์ด์ด์ ์ด ๋ง๋ ์์ ๊ธธ์ด(์ซ์ ๊ฐ์)๋ฅผ ๊ตฌํ ๋ค k์ ๋น๊ตํ์ฌ ์์ธ์ฒ๋ฆฌ
์์์๋ถํฐ k๋ฒ์งธ ์๋ฆฌ ์ซ์์ ์ค์ ์ ๊ตฌํ๊ธฐ
- ์์์๋ถํฐ k๋ฒ์งธ ์๋ฆฌ ์ซ์๊ฐ ์ํ ์ ๊ตฌํ๊ธฐ
- 2-i์์ ๊ตฌํ ์์ ๋ช๋ฒ์งธ ์๋ฆฌ ์ซ์์ธ์ง ๊ตฌํ๊ธฐ(์ต์ข ์ถ๋ ฅ ๊ฐ)
1-1. ์๋ฆฌ์ ๋ณ ์ซ์ ๊ฐ์ ๊ตฌํ๊ธฐ
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ 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
์ ๋ฐํํ๋ค.
- k๋ฒ์งธ ์๋ฆฌ ์ซ์ ๊ตฌํ๊ธฐ
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๋ก ์ธ๋ฑ์ฑํ์ฌ ์ ๊ทผํด์ผ ํจ
์์ฐ ๊ธ๋ก ์ฐ๋๊ฒ ๋ํ๋ค๋ค.
์ฝ๋
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 ๋ค์ ์์์ ์ธ๋ฑ์ฑํ์ฌ ์ ๊ทผ
}
}
}
}
๐ก
- ์ํ ๋ฌธ์ ๋ค์ ํ๋ค๋ณด๋ฉด ๋ญ๊ฐ ๊ฒธ์ํด์ง๋ ๋๋โฆใ ใ
- ์๋ฆฌ์ ๋ณ ์ซ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๊ท์น๋ง ์ฐพ์ผ๋ฉด ๊ทธ ๋ค์์ ๊ตฌํ ๋ฌธ์ ~~
- ํ์ด๋ฅผ ์์ธํ๊ฒ ์ ๋ฆฌํ๋๊น ์๊ฐ์ ์ค๋๊ฑธ๋ฆฌ์ง๋ง ํ์คํ ๋จธ๋ฆฌ์์ ์ ๋ฆฌ๊ฐ ๋๋ค.