[boj] 1074 Z

🔥·2024년 2월 4일

문제

[boj] 1074 Z


풀이

주어진 배열을 4등분 한 후 순서대로 방문한다.


코드

c++

// boj 1074 Z
// recursion
#include <iostream>
using namespace std;

int n, r, c;
int ans;

void z(int y, int x, int size);

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    cin >> n >> r >> c;
    z(0, 0, (1 << n));  // 2^2
    return 0;
}
void z(int y, int x, int size) {
    if (y == r && x == c) {
        cout << ans << "\n";
        return;
    }

    if (r < y + size && r >= y && c < x + size && c >= x) {  //(r, c)가 현재 사분면에 존재하는 경우
        z(y, x, size / 2);                                   // 1
        z(y, x + size / 2, size / 2);                        // 2
        z(y + size / 2, x, size / 2);                        // 3
        z(y + size / 2, x + size / 2, size / 2);             // 4
    } else
        ans += size * size;
}

javascript

// boj 1074 Z
// recursion

const input = require("fs").readFileSync("./example.txt").toString().split("\n");
// const input = require("fs").readFileSync("/dev/stdin").toString().split("\n");

const temp = input[0].split(" ").map(Number);
const n = temp[0];
const r = temp[1];
const c = temp[2];
let ans = 0;

function z(y, x, size) {
  if (y == r && x == c) {
    console.log(ans);
    return;
  }

  if (r < y + size && r >= y && c < x + size && c >= x) {
    //(r, c)가 현재 사분면에 존재하는 경우
    z(y, x, size / 2); // 1
    z(y, x + size / 2, size / 2); // 2
    z(y + size / 2, x, size / 2); // 3
    z(y + size / 2, x + size / 2, size / 2); // 4
  } else ans += size * size;
}

z(0, 0, 2 ** n);

0개의 댓글