문제
items 배열이 주어질 때 ruleValue와 일치하는 원소의 갯수를 찾는 문제였습니다. 이때 ruleKey도 같이 주어지는데 단순히 ruleValue가 안에 있는지를 확인하는게 아닌 items 배열 원소를 item이라고 할 때 item의 각 자리마다 대응되는 ruleKey를 통해 해당 인덱스의 value가 ruleValue인지 찾는 문제였습니다
예제
Input: items = [["phone","blue","pixel"],["computer","silver","lenovo"],["phone","gold","iphone"]], ruleKey = "color", ruleValue = "silver"
Output: 1
Explanation: There is only one item matching the given rule, which is ["computer","silver","lenovo"].
해결한 코드
const TypeObject = {
"type":0,
"color":1,
"name":2,
}
const countMatches = function(items, ruleKey, ruleValue) {
// TypeObject["type"]
const result = [...items].filter(v => {
if(v[TypeObject[ruleKey]] === ruleValue)
return v
})
return result.length
};
단순하게 ruleKey에 따라 대응되는 TypeObject를 하나 만들어서 ruleKey가 주어졌을 때 해당 오브젝트에서 찾은 뒤 인덱스 번호를 반환시켜 비교하고 filter를 통해 일치하는 값들로만 리턴시킨 뒤 갯수를 붙여 값으로 출력시켰습니다.
남이 푼 코드
배열로 새로 만들어서 return 시키는 것보다는 훨씬 더 메모리면에서 효율적임과 동시에 더 깔끔하고 이해가 잘 되는 코드였습니다.
하지만 실력이 부족해서 runtime이 왜 더 빠른지 이해가 안되서 조금 더 찾아 볼 예정입니다
const countMatches = (items, ruleKey, ruleValue) => {
let ans = 0;
for (let i = 0; i < items.length; i++) {
switch (ruleKey) {
case 'type':
if (items[i][0] === ruleValue) ans++;
break;
case 'color':
if (items[i][1] === ruleValue) ans++;
break;
case 'name':
if (items[i][2] === ruleValue) ans++;
break;
}
}
return ans;
};
'알고리즘' 카테고리의 다른 글
Leetcode - 1732. Find the Highest Altitude (0) | 2022.06.12 |
---|---|
Leetcode - 1207. Unique Number of Occurrences (0) | 2022.06.11 |
Javascript Map object (0) | 2022.06.09 |
Leetcode - How Many Numbers Are Smaller Than the Current Number (0) | 2022.06.07 |
Leetcode - Palindrome Number (0) | 2022.06.07 |