나의 브을로오그으

[c++] 1074번 : Z 본문

알고리즘/BaekJoon

[c++] 1074번 : Z

__jhp_+ 2022. 5. 20. 16:02

https://www.acmicpc.net/problem/1074

 

1074번: Z

한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을

www.acmicpc.net

#include <iostream>

using namespace std;

#define ELEM_SIZE			2
int N, r, c;

void Z(int length, int row, int column, int* count);
int Pow(int n, int length);

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

	int count = -1;
	cin >> N >> r >> c;
	Z(Pow(ELEM_SIZE, N), 0, 0, &count);
	cout << count << '\n';
	return 0;
}

int Pow(int n, int length)
{
	int result = 1;
	for (int i = 0; i < length; ++i)
	{
		result *= n;
	}
	return result;
}

void Z(int size, int row, int column, int* count)
{
	if (size <= ELEM_SIZE)
	{
		for (int i = row; i < row + ELEM_SIZE; ++i)
		{
			for (int j = column; j < column + ELEM_SIZE; ++j)
			{
				*count += 1;
				if (i == r && j == c) return;
			}
		}
	}
	else
	{
		bool isFound = false;
		int rowOffset = 0;
		int colOffset = 0;
		int halfSize = size / 2;
		if (r >= row + halfSize)
		{
			*count += size * halfSize;
			++rowOffset;
		}
		if (c >= column + halfSize)
		{
			*count += halfSize * halfSize;
			++colOffset;
		}
		row += rowOffset * halfSize;
		column += colOffset * halfSize;
		Z(size / 2, row, column, count);
	}
	return;
}

'알고리즘 > BaekJoon' 카테고리의 다른 글

[c++] 1260번 : DFS와 BFS  (0) 2022.05.31
[c++] 1107번 : 리모컨  (0) 2022.05.30
[c++] 1012번 : 유기농 배추  (0) 2022.05.18
[c++] 1003번 : 피보나치 함수  (0) 2022.05.18
[c++] 18111번 : 마인크래프트  (0) 2022.05.17