https://www.acmicpc.net/problem/10546
이 문제는 해시를 사용한 집합과 맵
문제이다.
사실 맵을 사용하지 않는다면 배열로 쉽게 풀 수 있을 것이다. 하지만 맵에 익숙해지기 위해서 맵으로 풀어보았다.
participantMap
에 set하고 동명이인이 있을 수 있기 때문에 sameCnt를 1로 초기화 시켜준다.const fs = require("fs");
const stdin = (
process.platform === "linux"
? fs.readFileSync("/dev/stdin").toString().trim()
: `5
marina
josipa
nikola
vinko
filipa
josipa
filipa
marina
nikola`
).split("\n");
const input = (() => {
let line = 0;
return () => stdin[line++];
})();
const N = Number(input());
const participantMap = new Map();
for (let i = 0; i < N; i++) {
const name = input();
participantMap.set(name, {
sameCnt: participantMap.get(name)
? participantMap.get(name).sameCnt + 1
: 1,
});
}
for (let i = 0; i < N - 1; i++) {
participantMap.get(input()).sameCnt -= 1;
}
let notCompletedName = "";
[...participantMap.entries()].flatMap((item) => {
if (item[1].sameCnt === 1) notCompletedName = item[0];
});
console.log(notCompletedName);
Map을 이용하는 것에 많이 미숙한 것 같다. 로직은 쉽게 떠올랐지만 구현하기 까지가 시간이 좀 걸렸다. 아무래도 객체를 잘 모르기 때문이 아닐까..? 시간이 나면 깊게 파봐야겠다.