[LeetCode] 2284. Sender With Largest Word Count - 자바스크립트 0620
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]
};