Bleeding edge

[LeetCode] 2053. Kth Distinct String in an Array - 자바스크립트 0621 본문

코딩테스트 공부

[LeetCode] 2053. Kth Distinct String in an Array - 자바스크립트 0621

codevil 2022. 6. 21. 12:45

https://leetcode.com/problems/kth-distinct-string-in-an-array/submissions/

 

Kth Distinct String in an Array - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

이 문제풀이를 할 때 목표는, 가독성을 높이기 위해 function으로 많이 쪼개려고 노력했다! 

1. 주어진 arr에 대하여, 각 arr들의 성분들이 가지고 있는 갯수를 세기 위하여 new map을 만들고, count를 시키는 함수를 만들었다. 이 문제는 순서를 이용하기 때문에 map이 아니라 arr를 리턴한다.

function distinctArrFunc(arr) {
    const map = new Map()
    for (let i = 0; i < arr.length; i++) {
        if (!map.has(arr[i])) {
            map.set(arr[i], 1)
        } else {
            map.set(arr[i], map.get(arr[i]) + 1)
        }
    }
    return Array.from(map)
}

2. 위로 구한 arr를 이용하여 구한 arr는 [component, num]과 같은 arr을 가지게 되는데, num의 갯수가 2보다 작은 distnct한 컴포넌트만을 남기기 위해 Array.filter를 이용한다.

function filterFunc(arr) {
    const result = arr.filter((element) => element[1] < 2)
    return result
}

3. k가 filterFunc에서 구한 arr보다 length가 더 크면 "" 아닌 경우에는 k-1 인덱스의 component를 리턴한다

var kthDistinct = function (arr, k) {
    const distinctArr = distinctArrFunc(arr)
    const filterArr = filterFunc(distinctArr)
    return filterArr.length >= k ? filterArr[k - 1][0] : ""
};

 

 

전체풀이

var kthDistinct = function (arr, k) {
    const distinctArr = distinctArrFunc(arr)
    const filterArr = filterFunc(distinctArr)
    return filterArr.length >= k ? filterArr[k - 1][0] : ""
};
function distinctArrFunc(arr) {
    const map = new Map()
    for (let i = 0; i < arr.length; i++) {
        if (!map.has(arr[i])) {
            map.set(arr[i], 1)
        } else {
            map.set(arr[i], map.get(arr[i]) + 1)
        }
    }
    return Array.from(map)
}
function filterFunc(arr) {
    const result = arr.filter((element) => element[1] < 2)
    return result
}