Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- react-native-dotenv
- adb pair
- ffi-napi
- react-native
- Each child in a list should have a unique "key" prop.
- github lfs
- html
- rolldown
- adb connect
- Git
- 이미지 데이터 타입
- Recoil
- device in use
- vercel git lfs
- animation
- augmentedDevice
- camera permission
- electron-packager
- github 100mb
- github pdf
- npm package
- nextjs
- Failed to compiled
- silent printing
- custom printing
- 티스토리 성능
- Can't resolve
- camera access
- ELECTRON
- dvh
Archives
- Today
- Total
Bleeding edge
[LeetCode] 2085. Count Common Words With One Occurrence - 자바스크립트 0630 본문
코딩테스트 공부
[LeetCode] 2085. Count Common Words With One Occurrence - 자바스크립트 0630
codevil 2022. 6. 30. 12:54https://leetcode.com/problems/count-common-words-with-one-occurrence/
주어진 두개의 array에서 중복이 없는 것들 중에서 두개의 중복이 되는 array의 length를 구하는 문제이다.
1. 각 array에 중복이 없는 child를 구하는 function을 구하고
2. 두개에서 공통적인 것을 골라낼 것이다.
풀이가 function으로 구분되어 있기 때문에 한번에 전체풀이를 올리겠습니다
var countWords = function (words1, words2) {
const filteredWords1 = filterWords(words1)
const filteredWords2 = filterWords(words2)
return filteredWords1.filter((element) => filteredWords2.includes(element)).length
};
function filterWords(words) {
return words.filter((element, index) => ![...words.slice(0, index), ...words.slice(index + 1)].includes(element))
}
개인적으로는 풀이가 너무 콤팩트해서 너무 좋았는데, 시간이 5%.. 너무 느려서 function 어느 부분에서 문제가 있는지 다른사람의 코드를 보고 비교해봤었다. 그 결과, filterWords function에서 풀이를 하는데 있어, filter보다 빠른 다른 오브젝트를 이용하는 것이 더 빨랐다. 이유는 사실 문제를 풀때 생각을 하긴 했었지만, filter 안에, 0, slice라는것 자체가 시간을 많이 들게 했을 거라고 생각한다.
개선된 풀이
var countWords = function (words1, words2) {
const filteredWords1 = Array.from(spli(words1))
const filteredWords2 = Array.from(spli(words2))
return filteredWords1.filter((element) => filteredWords2.includes(element))
};
function spli(arr) {
const distinct = new Set()
const overlap = new Set()
arr.map(x => (!distinct.has(x) && !overlap.has(x)) ? distinct.add(x) : (
distinct.has(x) && !overlap.has(x) ?
(distinct.delete(x), overlap.add(x)) : null
))
return distinct
}
set과 삼항 연산자를 이용하여 풀이를 하였다. 문제 자체는 너무 심플해서 어렵지는 않았지만, 속도 개선에 있어서, 중복을 걸러낼때는 map이나 set를 쓰는게 낫다는 판단이 들었다. 요즘 너무 filter에 빠진게 문제였던거 같다.
'코딩테스트 공부' 카테고리의 다른 글
최소공배수와 최대공약수에 관해서 (0) | 2022.07.06 |
---|---|
[LeetCode] 2150. Find All Lonely Numbers in the Array - 자바스크립트 0630 (0) | 2022.06.30 |
[LeetCode] 1768. Merge Strings Alternately - 자바스크립트 0630 (0) | 2022.06.30 |
[LeetCode] 1447. Simplified Fractions - 자바스크립트 0628 (0) | 2022.06.28 |
[LeetCode] 2180. Count Integers With Even Digit Sum - 자바스크립트 0628 (0) | 2022.06.28 |