코딩테스트 공부

[LeetCode] 2284. Sender With Largest Word Count - 자바스크립트 0620

codevil 2022. 6. 20. 14:08

https://leetcode.com/problems/sender-with-largest-word-count/

 

Sender With Largest Word Count - 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

이 문제에서는, map과 여러 조건의 sort를 사용하는 문제이다.

1. 먼저 map을 한개 만들어둔다. 이렇게 key를 활용하는 경우에는 map이 효율적이다.

    const map = new Map()

 

2. 주어진 senders를 기준으로 루프를 만들고. messages를 " " 스페이스로 스플릿 한 다음에, length를 선언한다

    for (let i = 0; i < senders.length; i++) {
        const number = messages[i].split(" ").length
        }

3. map에 senders[i]가 없다면, map set에  2에서 구한 number를 대입하고, 만약 map에 senders[i]에 값이 있다면 그 값을 get하여 number와 더한뒤 set한다

        if (!map.has(senders[i])) {
            map.set(senders[i], number)
        } else {
            map.set(senders[i], map.get(senders[i]) + number)
        }

4. 위에서 구한 map을 array from을 통하여 array로 바꿔준다. map에는 key를 통한 구성만 되어있지 누가 앞이고 이런 순서가 없기 때문이다.

    const answer = Array.from(map)

5. 4에서 구한 정렬을 sort를 시킬 것이다. 이때 sort의 규칙은, a[1] b[1]의 대소에 따라 더 큰 것을 앞으로 더 작은 것을 뒤로 할 것이다.

    const answer = Array.from(map).sort((a, b) => {
        if (a[1] > b[1]) { return -1 } else if (a[1] < b[1]) { return 1 }

    }

6. a[1] 과 b[1]이 같은 경우에는, a[0] b[0]중 사전적으로 좀 더 뒤에 있는 것을 앞으로 오게해야한다.

    const answer = Array.from(map).sort((a, b) => {
        if (a[1] > b[1]) { return -1 } else if (a[1] < b[1]) { return 1 }
        else if (a[1] === b[1]) {
            if (a[0] > b[0]) { return -1 }
            else if (a[0] < b[0]) { return 1 }
        }
    }

 

전체 풀이

var largestWordCount = function (messages, senders) {
    const map = new Map()
    for (let i = 0; i < senders.length; i++) {
        const number = messages[i].split(" ").length
        if (!map.has(senders[i])) {
            map.set(senders[i], number)
        } else {
            map.set(senders[i], map.get(senders[i]) + number)
        }
    }
    const answer = Array.from(map).sort((a, b) => {
        if (a[1] > b[1]) { return -1 } else if (a[1] < b[1]) { return 1 }
        else if (a[1] === b[1]) {
            if (a[0] > b[0]) { return -1 }
            else if (a[0] < b[0]) { return 1 }
        }
    }

    )
    return answer[0][0]
};