백준 1057번 - 토너먼트(Node.js)
https://www.acmicpc.net/problem/1057
1057번: 토너먼트
김지민은 N명이 참가하는 스타 토너먼트에 진출했다. 토너먼트는 다음과 같이 진행된다. 일단 N명의 참가자는 번호가 1번부터 N번까지 배정받는다. 그러고 난 후에 서로 인접한 번호끼리 스타를
www.acmicpc.net



- 알고리즘 분류 : 수학 브루트포스 알고리즘
나의 풀이
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const readline = require("readline"); | |
const rl = readline.createInterface({ | |
input: process.stdin, | |
output: process.stdout, | |
}); | |
let input = []; | |
rl.on("line", function (line) { | |
input.push(line); | |
N = Number(input[0].split(" ")[0]); | |
jimin = Number(input[0].split(" ")[1]); | |
hansu = Number(input[0].split(" ")[2]); | |
rl.close(); | |
}).on("close", function () { | |
let count = 1; | |
for (let i = 0; i < N; i++) { | |
if (Math.ceil(jimin / 2) === Math.ceil(hansu / 2)) { | |
break; | |
} else { | |
jimin = Math.ceil(jimin / 2); | |
hansu = Math.ceil(hansu / 2); | |
count++; | |
} | |
} | |
console.log(count); | |
process.exit(); | |
}); |
- 제출시 결과는 맞았습니다!!
- 이 문제의 로직은 아래와 같다.


- 따라서, 위의 로직에 따라 계속해서 지민과 한수의 번호를 각각 2로 나눠주고 반올림을 할때마다 count 값을 증가시켜주고, 만약, 지민과 한수의 번호를 각각 2로 나눠주고 반올림을 했을 때, 둘의 값이 같아지면 그 때의 count 값이 정답이 된다.
느낀점
- 규칙만 알면 되게 간단하게 풀 수 있는 문제였다.
- 하지만, 위의 규칙을 알기 전에는 전체 참가자 크기의 배열을 만들어주고, 경기를 할 때마다 배열을 줄여주는 방식으로 풀었었는데, 결국에는 이 방법도 위의 규칙을 알아야 풀 수 있었을 것 같다.
'Algorithm > Baekjoon' 카테고리의 다른 글
백준 2252번 - 줄 세우기(Node.js) (0) | 2022.08.08 |
---|---|
백준 11502번 - 세 개의 소수 문제(Node.js) (0) | 2022.08.04 |
백준 11047번 - 동전 0(Node.js) (0) | 2022.07.28 |
백준 10773번 - 제로(Node.js) (0) | 2022.07.27 |
물건을 쪼갤 수 없는 배낭 문제(0/1 Knapsack Problem) (0) | 2022.07.27 |