PS/백준 알고리즘[BOJ]

[백준 14601] 샤워실 바닥 깔기 (Large)

BE_개발자 2023. 10. 27. 10:58
728x90
반응형

1. 문제

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

 

14601번: 샤워실 바닥 깔기 (Large)

첫 번째 줄에는 바닥의 한 변의 길이를 표현하는 자연수 K(1 ≤ K ≤ 7) 가 주어진다. 이때 바닥의 크기는 2K 가 됨에 유의하라. 두 번째 줄에는 배수구의 위치를 나타내는 자연수 x, y (1 ≤ x, y ≤ 2K)

www.acmicpc.net

이미지 예시

#include<iostream>
using namespace std;
int num;
int map[128][128];
bool check(int x1, int y1, int x2, int y2) {
	for (int i = x1; i < x2; i++) {
		for (int j = y1; j < y2; j++) {
			if (map[i - 1][j - 1] != 0) return false;
		}
	}
	return true;
}
void tromino(int s, int x, int y, int& t) {
	if (s == 0) return;
	int size = (1 << s - 1);
	num++;
	if (check(x, y, x + size, y + size) == true) map[x + size - 2][y + size - 2] = num;
	if (check(x + size, y, x + 2 * size, y + size) == true) map[x + size - 1][y + size - 2] = num;
	if (check(x, y + size, x + size, y + 2 * size) == true) map[x + size - 2][y + size - 1] = num;
	if (check(x + size, y + size, x + 2 * size, y + 2 * size) == true) map[x + size - 1][y + size - 1] = num;
	tromino(s - 1, x, y, num);
	tromino(s - 1, x + size, y, num);
	tromino(s - 1, x, y + size, num);
	tromino(s - 1, x + size, y + size, num);
}
int main(void) {
	int k, m, n;
	cin >> k >> m >> n;
	map[m - 1][n - 1] = -1;
	int siz = (1 << k);
	tromino(k, 1, 1, num);
	for (int i = siz - 1; i >= 0; i--, cout << "\n") {
		for (int j = 0; j < siz; j++, cout << " ") cout << map[j][i];
	}
	return 0;
}
728x90
반응형