https://www.acmicpc.net/problem/1074
1074๋ฒ: Z
ํ์๋ 2์ฐจ์ ๋ฐฐ์ด (ํญ์ 2^N * 2^N ํฌ๊ธฐ์ด๋ค)์ Z๋ชจ์์ผ๋ก ํ์ํ๋ ค๊ณ ํ๋ค. ์๋ฅผ ๋ค์ด, 2*2๋ฐฐ์ด์ ์ผ์ชฝ ์์นธ, ์ค๋ฅธ์ชฝ ์์นธ, ์ผ์ชฝ ์๋์นธ, ์ค๋ฅธ์ชฝ ์๋์นธ ์์๋๋ก ๋ฐฉ๋ฌธํ๋ฉด Z๋ชจ์์ด๋ค. ๋ง์ฝ, 2์ฐจ์ ๏ฟฝ๏ฟฝ
www.acmicpc.net
โจ ๋ด ์์ค ์ฝ๋
#include<iostream>
using namespace std;
int Route[][2] = { {0,0}, {0,1}, {1,0}, {1,1} };
int r, c;
int result = 0;
bool z(int x, int y, long long int N) {
if (N > 2) {
if (z(x, y, N / 2)) {
return true;
}
else if (z(x, y + (N / 2), N / 2)) {
return true;
}
else if (z(x + (N / 2), y, N / 2)) {
return true;
}
else if (z(x + (N / 2), y + (N / 2), N / 2)) {
return true;
}
}
else {
for (int i = 0; i < 4; i++) {
if (x + Route[i][0] == r && y + Route[i][1] == c) {
return true;
}
else {
result +=1;
}
}
return false;
}
return false;
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL);
long long int N;
cin >> N >> r >> c;
z(0, 0, (1 << N));
cout << result;
return 0;
}
๐ ๋ฌธ์ ํ์ด
์ ๊ณฑ ๊ณ์ฐ์ ํ๋๊ฑธ ๋จ์ํ ํ๊ธฐ ์ํด์ '1<<N' ์ผ๋ก ๊ณ์ฐํ์๋ค
N์ด 2๋ณด๋ค ํฌ๋ฉด ์์ง 4๋ฑ๋ถ์ ๋ ํ ์ ์๋ค๋ ๊ฒ์ด๊ธฐ์, 4๋ฑ๋ถ์ ํด์ ์ฌ๊ท๋ฅผ ์งํ
(r, c)๊ฐ x, y๋ณด๋ค ํฌ๋ฉด ํด๋น ๋ถ๋ฉด ์ฌ๊ท๋ฅผ ์งํํ์ง ์๊ณ ๊ทธ๋งํผ์ ์๋ฅผ ๋ํด๋ฒ๋ฆฌ๋ฉด ์๊ฐ์ ๋ ๋จ์ถ ์ํฌ ์ ์์ ๊ฒ ๊ฐ๋ค! ์ด ๋ถ๋ถ ์์ !
Route[][]๋ Z๋ชจ์์ผ๋ก ์ด๋์ ํด์ผ๋๊ธฐ์, ์ด๋ ์ขํ ๊ฒฝ๋ก๋ฅผ ๋ฏธ๋ฆฌ ์ ์ฅ
โญ ๋ฌธ์ ํ์ด ๊ฒฐ๊ณผ
