new Map()
, set()
lost
배열을 돌면서 해당 번호의 학생은 체육복 수 0: get()
, set()
reserve
배열을 돌면서 해당 번호의 학생은 체육복 수 +1: get()
, set()
reserve
배열을 돌면서 체육복을 2개 갖고 있고 앞 번호가 하나도 갖고 있지 않은 경우 하나 주기: get()
, set()
filter()
function solution(n, lost, reserve) {
const map = new Map();
for (let i = 1; i <= n; ++i) map.set(i, 1);
lost.sort();
reserve.sort();
lost.forEach((n) => map.set(n, 0));
reserve.forEach((n) => map.set(n, map.get(n) + 1));
reserve.forEach((n) => {
const mine = map.get(n);
if (mine < 2) return;
if (map.get(n - 1) === 0) map.set(n - 1, 1);
else if (map.get(n + 1) === 0) map.set(n + 1, 1);
map.set(n, 1);
});
return [...map].filter((arr) => arr[1] === 1).length;
}
2차원 배열 대신 맵을 써봤더니 훨씬 깔끔하고 좋다 굿~~
테케 18, 20번이 자꾸 통과가 안 돼서 힌트를 봤더니 정렬을 해야 했다.
이 이유를 찾는 게 오래 걸렸는데, 예외 케이스는 아래와 같은 경우가 되겠다.
사실 이 문제는 한 4년 전에 자바로 풀어본 기억이 있다. 회사 동기들이랑 같이 풀어서 기억이 남..ㅎㅎㅎ (물론 어떻게 푸는지는 까먹었지만)
그때는 코테를 하나도 모르고 푸느라 한참 걸렸던 것 같은데 지금은 30분도 안 걸린 걸 보니 그동안 성장하긴 했구나 싶다.