미해결
- 문제
- 숫자로 이루어진 배열이 주어짐
- 그 안의 숫자 3개를 더해서 0이 되는 조합을 배열로 만들어 이중 배열로 리턴
- 수도코드
- 시도
var threeSum = function(nums) {
let result = [];
if (nums.filter(e => e === 0).length >= 3) {
result.push([0,0,0])
}
const dupl = [...new Set(nums.filter((i, x) => nums.indexOf(i) !== x))]
dupl.map((e) => {
let pick = nums.filter(n => n === -e*2 && n !== 0)
if (pick.length) result.push([e,e,pick[0]])
})
let setArr = [...new Set(nums)];
if (setArr.length < 3) return result;
let cur = 0;
while (cur < setArr.length - 2) {
let next = cur + 1
while (next < setArr.length - 1) {
for (let i = next + 1; i <= setArr.length - 1; i++) {
if (setArr[cur] + setArr[next] + setArr[i] === 0) {
let pick = [setArr[cur], setArr[next], setArr[i]].sort((a, b) => a - b)
let check = true
for (let i = 0; i < result.length; i++) {
check = check && !(JSON.stringify(result[i]) === JSON.stringify(pick))
}
if (check) {
result.push(pick)
break;
} else break;
}
}
next++;
}
cur++;
}
return result;
};
- 시간 초과, 이중 while에 반복문까지 겹쳐서 초과되는 것으로 판단
- 2번 while문에서 계산할 배열을 중복값을 제거하고 시도, 마찬가지로 실패
- 시간복잡도에 대한 고려가 부족함
- 레퍼런스