๐ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/1074
1074๋ฒ: Z
ํ์๋ ํฌ๊ธฐ๊ฐ 2N × 2N์ธ 2์ฐจ์ ๋ฐฐ์ด์ Z๋ชจ์์ผ๋ก ํ์ํ๋ ค๊ณ ํ๋ค. ์๋ฅผ ๋ค์ด, 2×2๋ฐฐ์ด์ ์ผ์ชฝ ์์นธ, ์ค๋ฅธ์ชฝ ์์นธ, ์ผ์ชฝ ์๋์นธ, ์ค๋ฅธ์ชฝ ์๋์นธ ์์๋๋ก ๋ฐฉ๋ฌธํ๋ฉด Z๋ชจ์์ด๋ค. N > 1์ธ ๊ฒฝ์ฐ, ๋ฐฐ์ด์
www.acmicpc.net
โธ ๋ฌธ์
ํ์๋ ํฌ๊ธฐ๊ฐ 2N × 2N์ธ 2์ฐจ์ ๋ฐฐ์ด์ Z๋ชจ์์ผ๋ก ํ์ํ๋ ค๊ณ ํ๋ค. ์๋ฅผ ๋ค์ด, 2×2๋ฐฐ์ด์ ์ผ์ชฝ ์์นธ, ์ค๋ฅธ์ชฝ ์์นธ, ์ผ์ชฝ ์๋์นธ, ์ค๋ฅธ์ชฝ ์๋์นธ ์์๋๋ก ๋ฐฉ๋ฌธํ๋ฉด Z๋ชจ์์ด๋ค.
N > 1์ธ ๊ฒฝ์ฐ, ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ 2N-1 × 2N-1๋ก 4๋ฑ๋ถ ํ ํ์ ์ฌ๊ท์ ์ผ๋ก ์์๋๋ก ๋ฐฉ๋ฌธํ๋ค.
๋ค์ ์๋ 22 × 22 ํฌ๊ธฐ์ ๋ฐฐ์ด์ ๋ฐฉ๋ฌธํ ์์์ด๋ค.
N์ด ์ฃผ์ด์ก์ ๋, rํ c์ด์ ๋ช ๋ฒ์งธ๋ก ๋ฐฉ๋ฌธํ๋์ง ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๋ค์์ N=3์ผ ๋์ ์์ด๋ค.
โธ ์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ N, r, c๊ฐ ์ฃผ์ด์ง๋ค.
โธ ์ถ๋ ฅ
rํ c์ด์ ๋ช ๋ฒ์งธ๋ก ๋ฐฉ๋ฌธํ๋์ง ์ถ๋ ฅํ๋ค.
๐ ๋ฌธ์ ์ ๋ณด
- ๐ฅ ๋ฌธ์ ๋ ๋ฒจ : ์ค๋ฒ 1
- ๐ ๋ฌธ์ ์ ํ : ๋ถํ ์ ๋ณต, ์ฌ๊ท
- ๐ฌ ํ์ด ์ธ์ด : JAVA
๐ค ๋ฌธ์ ํ์ด
์์ ํฌ์คํ ํ๋ ์์ข ์ด ๋ง๋ค๊ธฐ, ์ฟผ๋ํธ๋ฆฌ ๋ฌธ์ ์ ์ ์ฌํ์ง๋ง
N์ ๋ฒ์๊ฐ ์ต๋ 15์ด๋ฏ๋ก 2^15 ์ฌ์ด์ฆ์ map์ ๋ชจ๋ ์๊ฒ ๋ถํ ํด r, c๋ฅผ ํ๋์ฉ ํ์ธํ๋ค๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์, ๋จผ์ r, c๊ฐ 1, 2, 3, 4 ์ฌ๋ถ๋ฉด ์ค ์ด๋ ์ฌ๋ถ๋ฉด์ ์ํด์๋์ง ์ฒดํฌํด ์ฃผ๊ณ ,
r, c๊ฐ ์ํด์๋ ์ฌ๋ถ๋ฉด์์๋ง ์ฌ๊ท๋ฅผ ๋๋ ค์ฃผ์๋ค.
์๋ฅผ ๋ค์ด size = 4์ธ ์ด์ฐจ์ ๋ฐฐ์ด์ด ์๊ณ , r = 1, c = 1์ ๊ฐ์ ์ฐพ๋๋ค๊ณ ํ์
0 | 1 | 4 | 5 |
2 | 3 | 6 | 7 |
8 | 9 | 12 | 13 |
10 | 11 | 14 | 15 |
(1, 1)์ 1 ์ฌ๋ถ๋ฉด์ ์๊ณ , size/2๋ก 1 ์ฌ๋ถ๋ฉด์ ๋ํ ์ฌ๊ท๋ฅผ ํ๋ฉด
0 | 1 |
2 | 3 |
์์ ๊ฐ์ด size = 2์ธ ์ฌ๋ถ๋ฉด์ผ๋ก ๋ ๋๋๋ค.
์ฌ๊ธฐ์ (1, 1)์ 4 ์ฌ๋ถ๋ฉด์ ์๊ณ , ๋ค์ size/2๋ก ์ฌ๋ถ๋ฉด์ ๋ํ ์ฌ๊ท๋ฅผ ํ๋ฉด
3 |
size = 1์ธ 1 ์ฌ๋ถ๋ฉด ๊ฐ๋ง ๋จ๊ฒ ๋๋ค.
์ด๋ 1 ์ฌ๋ถ๋ฉด์ ๊ฐ์ธ 3์ด ์ ๋ต์ด ๋๊ณ , size = 1์ผ ๊ฒฝ์ฐ return ์กฐ๊ฑด์ด ๋๋ค.
๊ทธ๋ผ 1, 2, 3, 4 ์ฌ๋ถ๋ฉด์ ๋ฒ์์ ๋ํ if ์กฐ๊ฑด๋ฌธ์ด ๊ฐ๊ฐ ์๊ณ , ๊ทธ๋๋ง๋ค ์ด์ฐจ์ ๋ฐฐ์ด์ ๋ค์ด๊ฐ ๊ฐ์ ๊ตฌํด์ฃผ์ด์ผ ํ๋ค.
0 | 1 | 4 | 5 |
2 | 3 | 6 | 7 |
8 | 9 | 12 | 13 |
10 | 11 | 14 | 15 |
๋จผ์ , ์ด์ฐจ์ ๋ฐฐ์ด์ด๊ธฐ ๋๋ฌธ์ size๊ฐ 4์ผ ๊ฒฝ์ฐ 16๊ฐ์ง์ ์ซ์๊ฐ ๋ค์ด๊ฐ๊ณ , ์์์ด 0๋ถํฐ์ด๋ฏ๋ก 0~15๊น์ง์ ์ซ์๊ฐ ๋ค์ด์๋ค.
์ด๋ ๋ง์ฝ, 2 ์ฌ๋ถ๋ฉด์ ์ฌ๊ท๋ฅผ ํ๋ค๊ณ ํ๋ฉด, 1 ์ฌ๋ถ๋ฉด์ 0~3์ ์ธ์ด์ฃผ๊ณ 4๋ถํฐ ๊ฐ์ด ์์ํด์ผ ํ๋ค.
3 ์ฌ๋ถ๋ฉด์ ์ฌ๊ท๋ฅผ ํ๋ค๊ณ ํ๋ฉด, 1 2 ์ฌ๋ถ๋ฉด์ 0~7์ ์ธ์ด์ฃผ๊ณ 8๋ถํฐ ๊ฐ์ด ์์๋๋ค.
๋ฐ๋ผ์ ๊ฐ ์ฌ๋ถ๋ฉด์ 0, 4, 8, 12๊ฐ ํด๋น ์ฌ๋ถ๋ฉด์ ์์๊ฐ์ด ๋๋ค.
2 ์ฌ๋ถ๋ฉด : (size* size)/4
3 ์ฌ๋ถ๋ฉด : ((size* size)/4) * 2
4 ์ฌ๋ถ๋ฉด : ((size* size)/4) * 3
๊ฐ ์ฌ๊ท์์ ์์ ๊ฐ์ด ๊ณ์ฐํ์ฌ ์์๊ฐ์ ๋ํด์ฃผ๋ฉด ๋๋ค.
โ ์ต์ข ์ฝ๋
๋ฉ๋ชจ๋ฆฌ : 11636KB
์๊ฐ : 84ms
import java.io.*;
import java.util.StringTokenizer;
public class Main {
static int n, r, c;
static int ans = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken()); // 2N × 2N
// rํ c์ด์ ๋ช ๋ฒ์งธ๋ก ๋ฐฉ๋ฌธ
r = Integer.parseInt(st.nextToken());
c = Integer.parseInt(st.nextToken());
int size = (int)Math.pow(2, n); // ํ ๋ณ์ ๊ธธ์ด
partition(0, 0, size); // ์์์ , ํ ๋ณ์ ๊ธธ์ด
bw.append(ans + "\n");
bw.flush();
bw.close();
br.close();
}
private static void partition(int x, int y, int size) {
// ๋ ์ด์ ๋ถํ ๋ถ๊ฐ๋ฅ
if (size == 1) return;
// rํ c์ด์ด ๋ช ์ฌ๋ถ๋ฉด์ ์๋์ง ์ฒดํฌ
int newSize = size/2;
// 1 ์ฌ๋ถ๋ฉด์ ์๋ค๋ฉด ์ ๋ฐ์ผ๋ก ๋ถํ ํด์ ์ฌ๊ท (rํ c์ด์ด ์ด๋์ ์์นํ๋์ง ๋ค์ ํ์ธ)
if (r < x+newSize && c < y+newSize) partition(x, y, newSize);
// 2 ์ฌ๋ถ๋ฉด์ ์๋ค๋ฉด
if (r < x+newSize && c >= y+newSize) {
ans += (size*size) / 4; // ex) size = 2์ผ๋, 2์ฌ๋ถ๋ฉด์ด 1๋ฒ์งธ ๋ฐฉ๋ฌธ
partition(x, y+newSize, newSize);
}
// 3 ์ฌ๋ถ๋ฉด์ ์๋ค๋ฉด
if (r >= x+newSize && c < y+newSize) {
ans += ((size*size) / 4) * 2;
partition(x+newSize, y, newSize);
}
// 4 ์ฌ๋ถ๋ฉด์ ์๋ค๋ฉด
if (r >= x+newSize && c >= y+newSize) {
ans += ((size*size) / 4) * 3;
partition(x+newSize, y+newSize, newSize);
}
}
}
๐ ํจ๊ป ํ์ด๋ณด๋ฉด ์ข์ ๋ฐฑ์ค ๋ฌธ์
๐ reference
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Boj_21921] ๋ธ๋ก๊ทธ (1) | 2023.12.04 |
---|---|
[Boj_2447] ๋ณ ์ฐ๊ธฐ - 10 (0) | 2023.11.28 |
[Boj_1992] ์ฟผ๋ํธ๋ฆฌ (1) | 2023.11.28 |
[Boj_2630] ์์ข ์ด ๋ง๋ค๊ธฐ (0) | 2023.11.24 |
[Boj_20002] ์ฌ๊ณผ๋๋ฌด (0) | 2023.11.21 |