알고리즘

[BOJ] 1764 - 듣보잡(JS)

로돌씨 2024. 7. 16. 16:45

문제

김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 알파벳 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다.

듣도 못한 사람의 명단에는 중복되는 이름이 없으며, 보도 못한 사람의 명단도 마찬가지이다.

 

풀이

let fs = require("fs");
let input = fs.readFileSync('예제.txt').toString().trim().split("\n");
var [nonSee , nonHear] = input[0].split(" ").map(Number);
answer = [];
var map = new Map();
for(let i = 1; i < nonHear ; i++ ){
    map.set( input[i] , 1 )
}
for(let i = nonHear; i <input.length; i++){
   if(map.has(input[i])){
    map.set(input[i] , map.get(input[i]) + 1);
   }
}
console.log(map)

var arrMap = [...map]
for(let x of arrMap){
    var [a,b] = x
    if( b == 2){
        answer.push(a);
    }
}
console.log(answer.length)
if(answer.length>0){
    console.log(answer.sort().join("\n"))
}

 

우선map 에 듣도못한 사람을 추가해주고 , 그다음 보도못한사람을 추가하는데 만약 map에 똑같은 key를 가진 인원이 있다면 value에 1을 더해주는 방식으로 진행했다. 전개연산자를 이용해 map객체를 배열로 만들어주고 value값이 2라면 answer배열에 key값을 추가해주었다 .  만약 answer 배열의 길이가 0이라면 듣도보도못한사람이 없다는 뜻이므로 0만 리턴해주고 , 길이가 0보다 크다면 answer 의 길이와 배열을 정렬하여 한줄씩 출력해주었다.