Input: [2,2,3,2]
Output: 3
Input: [0,1,0,1,0,1,99]
Output: 99
1번만 나온 수를 return 해주면 되는 간단한 문제다.
하지만 간단한 문제도 효율적으로 예쁜 코드를 짜는 연습을 하는데에 도움이 된다고 생각한다.
object를 쓰는 것 보다 Map을 쓰는 것이 더 효율적이라 Map을 사용했다.
const singleNumber = function (nums) {
let result = 0;
const numMap = new Map();
nums.forEach((num) => { // Map에 num이 있으면 value + 1을 했고 없을 경우 1을 넣어줬다.
if (numMap.has(num)) {
numMap.set(num, numMap.get(num) + 1);
} else {
numMap.set(num, 1);
}
});
let entries = numMap.entries(); // Map의 entries을 활용했다.
for (let i = 0; i < numMap.size; i++) {
const [key, value] = entries.next().value; // MDN을 보면 next().value을 하면 순서대로 key, value 값이 나온다고 적혀있다. iterator라서 그런 것 같다. 구조 분해 문법으로 key와 value을 받았다.
if (value === 1) return key; // value가 1일 경우 return 해주었다.
}
};
const singleNumber = function (nums) {
let result = 0;
const numMap = new Map();
nums.forEach((num) => {
if (numMap.has(num)) {
numMap.set(num, numMap.get(num) + 1);
} else {
numMap.set(num, 1);
}
});
let entries = numMap.entries();
return [...entries].filter((entry) => entry[1] === 1)[0][0];
// 위에까진 똑같은데 마지막 부분이 달랐다. spread 문법을 통해 2차원 배열 형식으로 만들어주고. value가 1인 값의 key 값을 출력해주었다.
};