[백준 10546] 배부른 마라토너 with node.js

waterglasses·2022년 3월 28일
0
post-thumbnail

📌 문제

https://www.acmicpc.net/problem/10546

📌 풀이

이 문제는 해시를 사용한 집합과 맵 문제이다.
사실 맵을 사용하지 않는다면 배열로 쉽게 풀 수 있을 것이다. 하지만 맵에 익숙해지기 위해서 맵으로 풀어보았다.

  1. 참가한 마라토너들을 participantMap에 set하고 동명이인이 있을 수 있기 때문에 sameCnt를 1로 초기화 시켜준다.
  2. 동명이인이 있으면 sameCnt를 1씩 증가시켜준다.
  3. 완주한 마라토너들의 sameCnt를 1씩 빼준다.
  4. sameCnt가 1인 참가자를 반환하면 된다.
    이 과정에서 entries()와 flatMap()을 사용해보았다.

📌 코드

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을 이용하는 것에 많이 미숙한 것 같다. 로직은 쉽게 떠올랐지만 구현하기 까지가 시간이 좀 걸렸다. 아무래도 객체를 잘 모르기 때문이 아닐까..? 시간이 나면 깊게 파봐야겠다.

profile
매 순간 성장하는 개발자가 되려고 노력하고 있습니다.

0개의 댓글