문제 링크
풀이
const input = require("fs").readFileSync("/dev/stdin").toString().trim().split(/\s/);
const n = +input[0];
const m = +input[1];
const n_arr = input.slice(2, n+2);
const m_arr = input.slice(n+2);
function binary_search(arr, name) {
let high = arr.length-1;
let low = 0;
let mid;
while (low <= high) {
mid = Math.floor((high + low)/2);
if (arr[mid] > name) high = mid - 1;
else if (arr[mid] < name) low = mid + 1;
else return true;
}
return false;
}
const [long, short] = n_arr.length > m_arr.length ? [n_arr, m_arr] : [m_arr, n_arr];
long.sort();
const dbj = short.filter(name => binary_search(long, name));
console.log(dbj.length+"\n"+dbj.sort().join("\n"));
불린을 반환하는 이진 탐색 함수를 Array.prototype.filter의 콜백함수로 받아서 두 배열에서 겹치는 이름만을 추출해낸다.
long, short를 굳이 나눈 이유는 실행 시간을 줄이기 위해서이다. 나누지 않았을 때보다 약 28ms 정도 더 빨라진다.
'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 2960] 에라토스테네스의 체 with Node.js (0) | 2021.04.18 |
---|---|
[백준 4949] 균형잡힌 세상 with Node.js (0) | 2021.04.17 |
[백준 11399] ATM with Python (0) | 2021.04.16 |
[백준 1003] 피보나치 함수 with Python (0) | 2021.04.14 |
[백준 9095] 1, 2, 3 더하기 with Python (0) | 2021.04.14 |