[λ°±μ€] 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 λ€μ μμμ μΈλ±μ±νμ¬ μ κ·Ό
}
}
}
}
π‘
- μν λ¬Έμ λ€μ νλ€λ³΄λ©΄ λκ° κ²Έμν΄μ§λ λλβ¦γ γ
- μ리μ λ³ μ«μ κ°μλ₯Ό ꡬνλ κ·μΉλ§ μ°ΎμΌλ©΄ κ·Έ λ€μμ ꡬν λ¬Έμ ~~
- νμ΄λ₯Ό μμΈνκ² μ 리νλκΉ μκ°μ μ€λ걸리μ§λ§ νμ€ν 머리μμ μ λ¦¬κ° λλ€.