다윤 풀이
const filePath = process.platform === "linux" ? "/dev/stdin" : "input.txt"; let [N_M, ...input] = require("fs") .readFileSync(filePath) .toString() .trim() .split("\n"); const [N, M] = N_M.split(" ").map(Number); const names = input.slice(0, N); const cases = input.slice(N).map(Number); const powerList = []; const nameList = []; const set = {}; // 중복 거르기 for (let i = 0; i < N; i++) { let [name, power] = names[i].split(" "); power = Number(power); if (set[name]) continue; powerList.push(power); nameList.push(name); } const answer = []; const binarySearch = (p) => { let left = 0; let right = powerList.length - 1; while (left <= right) { let mid = parseInt((left + right) / 2); if (p > powerList[mid]) { left = mid + 1; } else { right = mid - 1; } } answer.push(nameList[right + 1]); }; cases.map((c) => binarySearch(c)); console.log(answer.join("\n"));
민수 풀이
let input = require('fs').readFileSync(__dirname + "/../input.txt").toString().trim().split("\n"); //let input = require('fs').readFileSync("/dev/stdin").toString().trim().split("\n"); const [N, M] = input.shift().split(' ').map(Number); const [titleArr, numArr] = [[],[]]; input = input.map(e => e.trim()); for(let i = 0; i < N; i++){ const [title, num] = input[i].split(' '); titleArr.push(title); numArr.push(+num); } function binarySearch(findValue){ let left = 0; let right = N - 1; let mid = N - 1; if(left === right) return mid while(true){ if((mid === 0 || numArr[mid-1] < findValue) && numArr[mid] >= findValue) return mid; if((mid === N-1 || numArr[mid] < findValue) && numArr[mid+1] >= findValue) return mid+1 numArr[mid] < findValue ? left = mid + 1 : right = mid - 1; mid = Math.floor((left + right) / 2); } } const result = []; for(let i = N; i < N+M; i++){ result.push(titleArr[binarySearch(+input[i])]); } console.log(result.join('\n'))
송희 풀이
승민 풀이
let fs = require('fs'); //const inputs = fs.readFileSync('/dev/stdin').toString().split('\n'); const inputs = fs.readFileSync(__dirname+'/ex2.txt').toString().split('\n'); const [n, m] = inputs[0].split(' ').map(Number); let obj = {} let l1 = []; for (let i=1; i<=n; i++) { let [name, num]= inputs[i].split(' '); num = Number(num); if (!Boolean(obj[num])) { //l1.includes(num) 으로 하면 시간초과.. obj[num] = name; l1.push(num); } } let answer = []; for (let i=0; i<m; i++) { const target = Number(inputs[i+n+1]) let start = result = 0; let end = l1.length - 1; while (start <= end) { let mid = parseInt((start + end) / 2); if (target <= l1[mid]) { end = mid - 1; result = l1[mid] } else { start = mid + 1; result = l1[start]; } } answer.push(obj[result]); } console.log(answer.join('\n'));