처음에는 시간 복잡도를 생각하지 않고 무지성으로 해를 구했지만.. 시간초과ㅠ
처음 코드는
function solution(X, Y) {
let result = []
const num1 = Array.from(X).sort((a,b) => b-a)
const num2 = Array.from(Y).sort((a,b) => b-a)
num1.forEach((value, i)=> {
if(num2.indexOf(value) !== -1) {
let commonIdx = num2.indexOf(value)
result.push(num2[commonIdx])
num2.splice(commonIdx,1)
}
})
return result.join('') === '' ? '-1' : +result.join('') === 0 ? '0' : result.join('')
}
forEach() 루프: O(n) 안에 indexOf(): O(n) 선형 탐색이 있었기 때문에 시간 복잡도는 O(n²) ......
어짜피 return 부분도 마음에 들지 않아서 다시 작성하기로 했다
function solution(X, Y) {
const frequency = new Map();
const result = [];
// X의 숫자 빈도수 계산
for(const num of X) {
frequency.set(num, (frequency.get(num) || 0) + 1);
}
// Y와 비교하며 공통 숫자 찾기
for(const num of Y) {
if(frequency.get(num) > 0) {
result.push(num);
frequency.set(num, frequency.get(num) - 1);
}
}
if(result.length === 0) return "-1";
result.sort((a,b) => b-a);
return result[0] === "0" ? "0" : result.join("");
}
O(n log n)으로 개선....
샘플이 적을 때는 큰 차이가 없지만 테스트 8 처럼 75% 개선 되는 테스트도 보였다
'JavaScript > Algorithm' 카테고리의 다른 글
[Algorithm] 알고리즘 기본 패턴 4 - Devide & Conquer (0) | 2025.01.12 |
---|---|
[Algorithm] 알고리즘 기본 패턴 3 - Sliding Window (0) | 2025.01.12 |
[Algorithm] 알고리즘 기본 패턴 2 - Multiple Pointers (다중 포인터) (0) | 2024.10.31 |
[Algorithm] 알고리즘 기본 패턴 1 - Frequency Counter (빈도수 세기) (0) | 2024.10.31 |
알고리즘 출제빈도순 수정중입니다 (0) | 2024.10.17 |