๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ์ธ๊ณต๋ถ€/Algorithm

[๋ฐฑ์ค€][Node.js] 1057๋ฒˆ : ํ† ๋„ˆ๋จผํŠธ

by ๐Ÿ‡๋ฐ•๋ด‰๋ด‰๐Ÿ‡ 2021. 6. 28.

 

 

Algorithm

-  ํ† ๋„ˆ๋จผํŠธ -

 


 

๋ฌธ์ œ

๊น€์ง€๋ฏผ์€ N๋ช…์ด ์ฐธ๊ฐ€ํ•˜๋Š” ์Šคํƒ€ ํ† ๋„ˆ๋จผํŠธ์— ์ง„์ถœํ–ˆ๋‹ค. ํ† ๋„ˆ๋จผํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰๋œ๋‹ค. ์ผ๋‹จ N๋ช…์˜ ์ฐธ๊ฐ€์ž๋Š” ๋ฒˆํ˜ธ๊ฐ€ 1๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€ ๋ฐฐ์ •๋ฐ›๋Š”๋‹ค. ๊ทธ๋Ÿฌ๊ณ  ๋‚œ ํ›„์— ์„œ๋กœ ์ธ์ ‘ํ•œ ๋ฒˆํ˜ธ๋ผ๋ฆฌ ์Šคํƒ€๋ฅผ ํ•œ๋‹ค. ์ด๊ธด ์‚ฌ๋žŒ์€ ๋‹ค์Œ ๋ผ์šด๋“œ์— ์ง„์ถœํ•˜๊ณ , ์ง„ ์‚ฌ๋žŒ์€ ๊ทธ ๋ผ์šด๋“œ์—์„œ ๋–จ์–ด์ง„๋‹ค. ๋งŒ์•ฝ ๊ทธ ๋ผ์šด๋“œ์˜ ์ฐธ๊ฐ€์ž๊ฐ€ ํ™€์ˆ˜๋ช…์ด๋ผ๋ฉด, ๋งˆ์ง€๋ง‰ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง„ ์ฐธ๊ฐ€์ž๋Š” ๋‹ค์Œ ๋ผ์šด๋“œ๋กœ ์ž๋™ ์ง„์ถœํ•œ๋‹ค. ๋‹ค์Œ ๋ผ์šด๋“œ์—์„  ๋‹ค์‹œ ์ฐธ๊ฐ€์ž์˜ ๋ฒˆํ˜ธ๋ฅผ 1๋ฒˆ๋ถ€ํ„ฐ ๋งค๊ธด๋‹ค. ์ด๋•Œ, ๋จผํ˜ธ๋ฅผ ๋งค๊ธฐ๋Š” ์ˆœ์„œ๋Š” ์ฒ˜์Œ ๋ฒˆํ˜ธ์˜ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ 1๋ฒˆ๋ถ€ํ„ฐ ๋งค๊ธด๋‹ค. ์ด ๋ง์€ 1๋ฒˆ๊ณผ 2๋ฒˆ์ด ์Šคํƒ€๋ฅผ ํ•ด์„œ 1๋ฒˆ์ด ์ง„์ถœํ•˜๊ณ , 3๋ฒˆ๊ณผ 4๋ฒˆ์ด ์Šคํƒ€๋ฅผ ํ•ด์„œ 4๋ฒˆ์ด ์ง„์ถœํ–ˆ๋‹ค๋ฉด, 4๋ฒˆ์€ ๋‹ค์Œ ๋ผ์šด๋“œ์—์„œ ๋ฒˆํ˜ธ 2๋ฒˆ์„ ๋ฐฐ์ •๋ฐ›๋Š”๋‹ค. ๋ฒˆํ˜ธ๋ฅผ ๋‹ค์‹œ ๋ฐฐ์ •๋ฐ›์€ ํ›„์— ํ•œ ๋ช…๋งŒ ๋‚จ์„ ๋•Œ๊นŒ์ง€ ๋ผ์šด๋“œ๋ฅผ ๊ณ„์† ํ•œ๋‹ค.

 

๋งˆ์นจ ์ด ์Šคํƒ€ ๋Œ€ํšŒ์— ์ž„ํ•œ์ˆ˜๋„ ์ฐธ๊ฐ€ํ–ˆ๋‹ค. ๊น€์ง€๋ฏผ์€ ๊ฐ‘์ž๊ธฐ ์Šคํƒ€ ๋Œ€ํšŒ์—์„œ ์šฐ์Šนํ•˜๋Š” ์š•์‹ฌ์€ ์—†์–ด์ง€๊ณ , ๋ช‡ ๋ผ์šด๋“œ์—์„œ ์ž„ํ•œ์ˆ˜์™€ ๋Œ€๊ฒฐํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ด์กŒ๋‹ค. ์ผ๋‹จ ๊น€์ง€๋ฏผ๊ณผ ์ž„ํ•œ์ˆ˜๋Š” ์„œ๋กœ ๋Œ€๊ฒฐํ•˜๊ธฐ ์ „๊นŒ์ง€ ํ•ญ์ƒ ์ด๊ธด๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. 1๋ผ์šด๋“œ์—์„œ ๊น€์ง€๋ฏผ์˜ ๋ฒˆํ˜ธ์™€ ์ž„ํ•œ์ˆ˜์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๊ณผ์—ฐ ๊น€์ง€๋ฏผ๊ณผ ์ž„ํ•œ์ˆ˜๊ฐ€ ๋ช‡ ๋ผ์šด๋“œ์—์„œ ๋Œ€๊ฒฐํ•˜๋Š”์ง€ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

 

๋ฌธ์ œ ํ’€๊ธฐ

const readline = require("readline");
const rl = readline.createInterface({
	input: process.stdin,
	output: process.stdout,
});
let input;
rl.on("line", function (line) {
	input = line
		.toString()
		.split(" ")
		.map((el) => +el);
}).on("close", function () {
	let member = new Array(input[0]).fill(1);
	member = member.map((el, idx) => (member[idx] = el + idx));
	let round = 1;

	while (true) {
		let torf = false;
		let win = [];
		for (let i = 0; i < member.length; i += 2) {
			let [num1, num2] = [member[i], member[i + 1]];
			// ๋งŒ์•ฝ ๋‘˜์ค‘ ํ•˜๋‚˜๊ฐ€ undefined ๋ผ๋ฉด
			if (num2 === undefined) {
				win.push(num1);
			}
			// ๋งŒ์•ฝ ๋‘˜์ค‘์— ํ•œ ๊ฐ’์ด ํ•ด๋‹น์ˆ˜๋ผ๋ฉด
			else if (
				[input[1], input[2]].includes(num1) ||
				[input[1], input[2]].includes(num2)
			) {
				// ๋งŒ์•ฝ ๋‘์ˆ˜๊ฐ€ ๋ชจ๋‘ ๊ฐ™๋‹ค๋ฉด
				if (
					[input[1], input[2]].includes(num1) &&
					[input[1], input[2]].includes(num2)
				) {
					torf = true;
					break;
				} else {
					if ([input[1], input[2]].includes(num1)) {
						win.push(num1);
					} else {
						win.push(num2);
					}
				}
			} else {
				win.push(num2);
			}
		}
		if (torf) break;
		round++;
		member = win;
	}
	console.log(round);
	process.exit();
});

 

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€