[Boj_20444] ์์ข ์ด์ ๊ฐ์
๐ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/20444
โธ ๋ฌธ์
์ค๋๋ ์ญ์ ์ค์ฑ์ด๋ ์ด๊น์์ด ์์ข ์ด์ ์ฟผ๋ฆฌ๋ฅผ ํธ๋ ๋ฐ ์คํจํ์๋ค!!
์์ข ์ด์ ์ด๋ฑ๊ฐ์ ๋๋ ์ค์ฑ์ด๋ ๊ฐ์๋ก ๋์ ๋ณด์ด๋ ์์ข ์ด๋ฅผ ๋ชจ๋ ์๋ผ ๋ฒ๋ฆฌ๋ ค๊ณ ํ๋ค!!
์์ข ์ด๋ฅผ ์๋ฅผ ๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ๋ฐ๋ฅธ๋ค.
- ์์ข ์ด๋ ์ง์ฌ๊ฐํ์ด๋ฉฐ, ์์ข ์ด๋ฅผ ์๋ฅผ ๋๋ ํ ๋ณ์ ํํํ๊ฒ ์๋ฅธ๋ค.
- ์๋ฅด๊ธฐ ์์ํ์ผ๋ฉด, ๊ฒฝ๋ก ์์ ๋ชจ๋ ์์ข ์ด๋ฅผ ์๋ฅผ ๋๊น์ง ๋ฉ์ถ์ง ์๋๋ค.
- ์ด๋ฏธ ์๋ฅธ ๊ณณ์ ๋ ์๋ฅผ ์ ์๋ค.
๋ถ๋
ธ์ ์ฐฌ ๊ฐ์์ง์ ํ๋ ์ค์ฑ์ด๋ ๊ฐ์๊ธฐ ํ๋์ ์์ข
์ด๋ฅผ ์ ํํ n๋ฒ์ ๊ฐ์์ง๋ก k๊ฐ์ ์์ข
์ด ์กฐ๊ฐ์ผ๋ก ๋ง๋ค ์ ์๋์ง ๊ถ๊ธํด์ก๋ค.
๊ถ๊ธํ์ง๋ง ํ๊ฐ ๋์ ์ฝ๋ฉ์ ์ง์คํ ์ ์๋ ์ค์ฑ์ด ๋์ ์ฝ๋๋ฅผ ์์ฑํด์ฃผ๋๋ก ํ์.
โธ ์ ๋ ฅ
์ฒซ ์ค์ ์ ์ n, k๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ n ≤ 231-1, 1 ≤ k ≤ 263-1)
โธ ์ถ๋ ฅ
์ฒซ ์ค์ ์ ํํ n๋ฒ์ ๊ฐ์์ง๋ก k๊ฐ์ ์์ข ์ด ์กฐ๊ฐ์ ๋ง๋ค ์ ์๋ค๋ฉด YES, ์๋๋ผ๋ฉด NO๋ฅผ ์ถ๋ ฅํ๋ค.
๐ ๋ฌธ์ ์ ๋ณด
- ๐ฅ ๋ฌธ์ ๋ ๋ฒจ : ๊ณจ๋ 5
- ๐ ๋ฌธ์ ์ ํ : ์ํ, ์ด๋ถ ํ์
- ๐ฌ ํ์ด ์ธ์ด : JAVA
๐ค ๋ฌธ์ ํ์ด
์ด๋ถ ํ์์ผ๋ก ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์๋ค.
๊ฐ๋ก ๋๋ ์ธ๋ก๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ข ์ด๋ฅผ ์๋ฅธ๋ค๊ณ ํ ๋, ๊ทธ ์๋ฅด๋ ํ์์ ๋ฐ๋ผ ์์ข ์ด์ ์กฐ๊ฐ ์๊ฐ ๊ฒฐ์ ๋๋ค.
์๋ฅด๋ ํ์์ ์ต์๊ฐ์ 0, ์ต๋๊ฐ์ N/2๋ก ์ค์ ํ๋ค.
์๋ฅผ ๋ค์ด, ๊ฐ๋ก๋ก ์๋ฅธ ํ์์ ์ธ๋ก๋ก ์๋ฅธ ํ์๊ฐ ์๋์ ๊ฐ๋ค๊ณ ํด๋ณด์.
๊ฐ๋ก๋ก ์๋ฅธ ํ์ | ์ธ๋ก๋ก ์๋ฅธ ํ์ |
0 | N |
N | 0 |
N/2 | N/2 |
์ฆ, ๊ฐ๋ก์ ์ธ๋ก๋ ๋์นญ์ ์ด๋ฃจ๋ฏ๋ก N/2๊น์ง๋ง ํ์ํ๋ฉด ๋๋ค.
๋์ ๊ฒฝ์ฐ๋ ๊ฐ๋ก๋ก ์๋ฅธ ํ์๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์์ ์งํํ๋ค.
์ด๋, ์ธ๋ก๋ก ์๋ฅธ ํ์๋ ๊ฐ์ด ๊ตฌํ์ฌ ๊ฐ๊ฐ์ ํ์๋ฅผ ๊ฐ์ง๊ณ ์๋ฆฌ๋ ์์ข ์ด์ ์ด๊ฐ์๋ฅผ ๊ณ์ฐํด ์ฃผ์๋ค.
์๋ฆฌ๋ ์์ข ์ด์ ์ด ๊ฐ์ : (๊ฐ๋ก๋ก ์๋ฅธ ํ์+1)*(์ธ๋ก๋ก ์๋ฅธ ํ์+1)
์์ข ์ด์ ์ด๊ฐ์ total์ด k์ ๊ฐ๋ค๋ฉด, n ๋ฒ์ ๊ฐ์์ง๋ก k ๊ฐ์ ์์ข ์ด ์กฐ๊ฐ์ ๋ง๋ค ์ ์์ผ๋ฏ๋ก YES ์ถ๋ ฅํ๊ณ ํ์์ ์ข ๋ฃํ๋ค.
total > k๋ผ๋ฉด, ์์ข ์ด ์กฐ๊ฐ์ด ๋์น๋ฏ๋ก ๋ ํฌ๊ฒ ์๋ผ ๊ฐ์๋ฅผ ์ค์ฌ์ค๋ค. ์ฆ, row ๊ฐ์ ์ค์ธ๋ค.
total < k๋ผ๋ฉด, ์์ข ์ด ์กฐ๊ฐ์ด ๋ถ์กฑํ๋ฏ๋ก ๋ ์๊ฒ ์๋ผ ๊ฐ์๋ฅผ ๋๋ ค์ค๋ค. ์ฆ, row ๊ฐ์ ๋๋ฆฐ๋ค.
ํ์์ด ๋๋ ๋๊น์ง total๊ณผ k๊ฐ ๊ฐ์ง ์๋ค๋ฉด NO๋ฅผ ์ถ๋ ฅํ๋ค. ์ฆ, n ๋ฒ์ ๊ฐ์์ง๋ก k ๊ฐ์ ์์ข ์ด ์กฐ๊ฐ์ ๋ง๋ค ์ ์๋ ๊ฒ์ด๋ค.
์ ํ์ด๋ฅผ ์ฝ๋๋ก ์์ฑํด ๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
โ ์ต์ข ์ฝ๋
๋ฉ๋ชจ๋ฆฌ : 11532KB
์๊ฐ : 72ms
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
// n๋ฒ์ ๊ฐ์์ง๋ก k๊ฐ์ ์์ข
์ด ์กฐ๊ฐ์ ๋ง๋ค ์ ์๋์ง
long n = Long.parseLong(st.nextToken());
long k = Long.parseLong(st.nextToken());
long start = 0; // ์๋ฅด๋ ํ์์ ์ต์๊ฐ
long end = n/2; // ์ต๋๊ฐ
while (start <= end) {
// ๊ฐ๋ก๋ก ๋ช ๋ฒ ์๋๋์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ๋๋ค.
long row = start + (end - start) / 2;
long col = n-row;
// ์๋ฅธ ์์ข
์ด ์กฐ๊ฐ์ ์ด ๊ฐ์
long total = getTotal(row, col);
if (total == k) { // ์กฐ๊ฑด ๋ง์กฑ
System.out.println("YES");
return;
} else if (total > k) { // ์์ข
์ด ์กฐ๊ฐ ๋์นจ, ๋ ํฌ๊ฒ ์๋ผ์ผ ํจ
end = row-1;
} else { // ์์ข
์ด ์กฐ๊ฐ ๋ถ์กฑ, ๋ ์๊ฒ ์๋ผ์ผ ํจ
start = row+1;
}
}
System.out.println("NO");
}
private static long getTotal(long row, long col) {
return (row+1)*(col+1);
}
}
๋ฌธ์ ๋ฅผ ์ฝ๊ณ ์ด๋ถ ํ์์ ๋ ์ฌ๋ฆฌ๋ ๊ฒ ์ฝ์ง ์๋ค. ๋ ์ด๋ค ๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ์์ ์งํํด์ผ ํ ์ง ์ฐพ๋ ๊ฒ๋ ์ด๋ ต๋ค. ๐ญ
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๊ฐ์ ๋ฒ์๊ฐ ํฌ๊ณ ์๊ฐ์ ํ์ด ์๋ค๋ฉด ์ด์ง ํ์ ๋จผ์ ๋ ์ฌ๋ ค์ผ๊ฒ ๋ค !
์ด์ฐ์ ์ฐ ํด๊ฒฐ ์๋ฃ ! ๐ฅ