ํ์ด
๋์ ํ ๋ฌธ์ ๋ฅผ ์ดํดํ ์ ์์ด ๋ค๋ฅธ ๋ถ์ ํ์ด๋ฅผ ์ฐธ์กฐํด ํ์๋ ๋ฌธ์ ์ ๋๋ค. ์ ์ฒด ํ์ด ๊ณผ์ ์ ์๋์ ๊ฐ์๋ฐ์, ํต์ฌ ์์ด๋์ด์ ๊ดํด์๋ง ๊ฐ๋จํ๊ฒ ์ค๋ช ํด๋ณด๊ฒ ์ต๋๋ค. ์ฐ์ 2์ฐจ์ ๋ฐฐ์ด A๋ N X N ํํ(N์ 10^5 ์ดํ)์ด๋ฉฐ, A์ ๋ค์ด๊ฐ ๊ฐ๋ค์ N^2๊ฐ์ธ๋ฐ ์ด ๊ฐ๋ค์ด 1์ฐจ์ ๋ฐฐ์ด B์ ์ค๋ฆ์ฐจ์์ผ๋ก ๋ค์ด์์ต๋๋ค.
์ด ๋ฌธ์ ๋ ์์ฐจ์ ์ธ ํ์์ผ๋ก ํ๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ด๋ถํ์์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๊ตฌํ๊ณ ์ ํ๋ ์ซ์๋ณด๋ค ์์ ์ซ์์ ๊ฐ์๊ฐ ๊ฐ ํ์ ๋ช ๊ฐ ์กด์ฌํ๋์ง๋ฅผ ์์์ผ ํ๋๋ฐ์, ์ด๋ฅผ ์ํด ๊ตฌํ๊ณ ์ ํ๋ ์ซ์๋ฅผ ๊ฐ ํ์ ์๋ก ๋๋ ์ค์ผ ํฉ๋๋ค.
์ด๋ฅผ ๋ง๋ก ํ๋ฉด ์ ์๋ฟ์ง ์์ ์ ์๋๋ฐ์, ๊ทธ๋ฆผ์ผ๋ก ๋ณด๋ฉด ์กฐ๊ธ ๋ ์ง๊ด์ ์ผ๋ก ์ ์ ์์ต๋๋ค. ์ฆ ๊ฐ ํ์ n์ผ๋ก ๋๋ ์ ์์ ๋ณด๋ค ์์ ์๋ค์ ์ฐพ์ผ๋ฉด ๋ฉ๋๋ค. ์๋์์ 4๋ณด๋ค ์์ ์๋ฅผ ์ฐพ๋๊ฒฝ์ฐ ์ฒซ ํ์๋ 4๊ฐ, ๋๋ฒ์งธ ํ์๋ 3๊ฐ, ์ธ ๋ฒ์งธ ํ์๋ 2๊ฐ, ๋ง์ง๋ง ํ์๋ 1๊ฐ๊ฐ ์กด์ฌํ๋๋ฐ์, ๋ฐ๋ผ์ ์ด 10๊ฐ์ ์๊ฐ 4๋ณด๋ค ์์ต๋๋ค. ์ด๋ฅผ ์ผ๋ฐํํด๋ณด๋ฉด ์ฐ๋ฆฌ๊ฐ ๊ตฌํ๋ ค๋ ๊ฐ์ด S์ผ๋ ์ด S๋ 1ํ๋ถํฐ Nํ๊น์ง i๋ฒ์งธ ํ์์ min(S/i, N)์ ๋ํ ๊ฐ์ด๋ผ๋ ๊ฒ์ ์ ์๊ฐ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ 1๋ถํฐ K ์ฌ์ด์ ์๋ S๊ฐ์ ์ฐพ์์ผ ํ๋ฉฐ ์ด ๊ณผ์ ์์ ์ด๋ถํ์์ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ ์๊ฐ ์๋ ๊ฒ์ ๋๋ค. ๋ง์ฝ ์ด๋ค S์ ๋ํด 1ํ๋ถํฐ Nํ๊น์ง i๋ฒ์งธ ํ์์ min(S/i, N)์ ๋ํ ๊ฐ์ด K๋ณด๋ค ์๋ค๋ฉด S๊ฐ์ ๋ ํฐ ๋ฒ์์์ ์ฐพ์์ผ ํ๋ฉฐ, K๋ณด๋ค ํฌ๋ฉด S๊ฐ ์ดํ์์ ํ์์ ํด์ผํ๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ์ฝ๋๋ ์๋์ ๊ฐ์ต๋๋ค.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static long n;
static long k;
static long result;
public static void main(String[] args) throws Exception {
n = input.inputLong();
k = input.inputLong();
long left = 1;
long right = k;
System.out.println(binarySearch(left, right));
}
static long binarySearch(long left, long right) {
int count = 0;
if (left > right) return result;
long mid = (left + right) / 2;
for (int index = 1; index <= n; index++) {
count += Math.min(mid / index, n);
}
if (k <= count) {
result = mid;
return binarySearch(left, mid - 1);
}
return binarySearch(mid+1, right);
}
static Input input = new Input();
static class Input {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer("");
public long inputLong() throws Exception {
if (!st.hasMoreElements()) st = new StringTokenizer(br.readLine());
return Integer.parseInt(st.nextToken());
}
public int integer() throws Exception {
if (!st.hasMoreElements()) st = new StringTokenizer(br.readLine());
return Integer.parseInt(st.nextToken());
}
public String next() throws Exception {
if (!st.hasMoreElements()) st = new StringTokenizer(br.readLine());
return st.nextToken();
}
}
}
'๐ PS > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
boj-1916 (0) | 2022.08.24 |
---|---|
boj-2252 (0) | 2022.08.22 |
boj-1850 (0) | 2022.07.23 |
boj-1922 ๋คํธ์ํฌ ์ฐ๊ฒฐ (0) | 2022.07.19 |
boj-1744 ์ ๋ฌถ๊ธฐ (0) | 2022.07.15 |
๋๊ธ