Javascript ES6부터 지원되는 Set 객체를 사용하면 쉽게 풀 수 있는 문제다.
해쉬테이블 : Set()
add(val)
Set 컬렉션에 val값 추가
delete(val)
Set 컬렉션 내에 존재하는 val값 제거
has(val)
Set 컬렉션 내에 val의 존재유무 판단 true, false 반환.
clear()
Set 컬렉션 내에 모든 요소들 제거
const filePath = process.platform === 'linux' ? 'dev/stdin' : './input.txt';
const input = require('fs').readFileSync(filePath).toString().trim().split('\n');
const [N, M] = input.shift().split(' ').map(v=>+v);
const noHearSet = new Set();
const noSeeSet = new Set();
for (let i = 0; i < input.length; i++) {
if (i < N) {
noHearSet.add(input[i]);
} else {
noSeeSet.add(input[i]);
}
}
let answer = [];
noSeeSet.forEach(v => { // 그냥 예시에서 주어진 값 중에 길이가 긴 것을 비교대상으로 잡음.
if (noHearSet.has(v)) answer.push(v);
});
console.log(answer.length + '\n' + answer.join('\n'));