[BOJ]1074 Z

강동현·2023년 12월 26일
0

코딩테스트

목록 보기
52/111
  • sol 재귀
    Z모양으로, board의 칸을 방문했을 때, r행 c열의 방문 순서를 출력하는 것
    시간초과 => 4사분면 모두 탐색하는 방식이 아닌 한 분면만 탐색하는 방식 적용
#include <bits/stdc++.h>
using namespace std;
int N, r, c, idx = 1;
void recursion(int x, int y, int n){
    int len = pow(2, n);
    if(n == 1){
        if(x == r && y == c) {
            cout << idx - 1;
            return;
        }
        ++idx;
        if(x == r && y+1 == c) {
            cout << idx - 1;
            return;
        }
        ++idx;
        if(x+1 == r && y == c) {
            cout << idx - 1;
            return;
        }
        ++idx;
        if(x+1 == r && y+1 == c) {
            cout << idx - 1;
            return;
        }
        ++idx;
        return;
    }
    else{
        if(r < x + len / 2 && c < y + len / 2) {
            recursion(x, y, n-1);
        }
        else if(r < x + len / 2 && c >= y + len / 2) {
            idx += pow(pow(2, n-1), 2);
            recursion(x, y + len / 2, n-1);
        }
        else if(r >= x + len / 2 && c < y + len / 2) {
            idx += 2 * pow(pow(2, n-1), 2);
            recursion(x + len / 2, y, n-1);
        }
        else if(r >= x + len / 2 && c >= y + len / 2) {
            idx += 3 * pow(pow(2, n-1), 2);
            recursion(x + len / 2, y + len / 2, n-1);
        }
    }
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    cin >> N >> r >> c;
    recursion(0, 0, N);
    return 0;
}
profile
GAME DESIGN & CLIENT PROGRAMMING

0개의 댓글