본문 바로가기

Algorithm/baekjoon

[NodeJS] 백준 2630

728x90
/**
 * @link https://www.acmicpc.net/problem/2630
 */
const readline = require('readline');

const strToNumberArr = (str) => str.split(' ').map(Number);

const rl = readline.createInterface({
	input: process.stdin,
	output: process.stdout,
});

const input = [];

rl.on('line', (line) => {
	input.push(line);
}).on('close', () => {
	const n = Number(input.shift());
	const board = input.map(strToNumberArr);

	const result = solution(n, board);

	console.log(result.join('\n'));

	process.exit();
});

/**
 *
 * @param {number} n
 * @param {number[][]} board
 */
function solution(n, board) {
	const answer = [0, 0]; // [하얀색 칸 수, 파란색 칸 수]

	/**
	 *
	 * @param {number} num
	 * @param {number} r
	 * @param {number} c
	 */
	const isValid = (num, r, c, len) => {
		for (let i = r; i < r + len; i++) {
			for (let j = c; j < c + len; j++) {
				if (num !== board[i][j]) {
					return false;
				}
			}
		}

		return true;
	};

	const stack = [[0, 0, n]];

	while (stack.length) {
		const [r, c, len] = stack.pop();

		const num = board[r][c];
		if (isValid(num, r, c, len)) {
			answer[num]++;
			continue;
		}

		const newLen = len / 2;

		// 0 1
		// 2 3

		// 0
		stack.push([r, c, newLen]);
		// 1
		stack.push([r, c + newLen, newLen]);
		// 2
		stack.push([r + newLen, c, newLen]);
		// 3
		stack.push([r + newLen, c + newLen, newLen]);
	}

	return answer;
}
728x90

'Algorithm > baekjoon' 카테고리의 다른 글

[NodeJS] qorwns 11724  (0) 2022.09.26
[NodeJS] 백준 11279  (0) 2022.09.26
[NodeJS] 백준 17626  (0) 2022.09.25
[NodeJS] 백준 11727  (0) 2022.09.25
[NodeJS] 백준 11726  (0) 2022.09.25