- [레벨1][자바스크립트] 숫자 짝궁2023년 07월 17일 23시 25분 09초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
https://school.programmers.co.kr/learn/courses/30/lessons/131128?language=javascript
1. 리팩토링 전
function solution(X, Y) { let xArr = [...X]; let yArr = [...Y]; const xObj = xArr.reduce((acc, curr) => { acc[curr] === undefined ? (acc[curr] = 1) : (acc[curr] += 1); return acc; }, {}); const yObj = yArr.reduce((acc, curr) => { acc[curr] === undefined ? (acc[curr] = 1) : (acc[curr] += 1); return acc; }, {}); const set1 = new Set(xArr); const set2 = new Set(yArr); const intersection = [...set2].filter((v) => set1.has(v)); let answer = ""; intersection.forEach((key) => { const count = Math.min(xObj[key], yObj[key]); for (let i = 0; i < count; i++) { answer += key; } }); if (!answer) return "-1"; answer = [...answer].sort((a, b) => b - a).join(""); return answer.slice(0, 1) === "0" ? "0" : answer; }
2. 리팩토링 후
function solution(X, Y) { const countOccurrences = (arr) => { return arr.reduce((acc, curr) => { acc[curr] = (acc[curr] || 0) + 1; return acc; }, {}); }; const xObj = countOccurrences([...X]); const yObj = countOccurrences([...Y]); const findIntersection = (obj1, obj2) => { return Object.keys(obj1).filter((key) => obj2[key]); }; const intersection = findIntersection(xObj, yObj); let answer = ""; intersection.forEach((key) => { const count = Math.min(xObj[key], yObj[key]); answer += key.repeat(count); }); if (!answer) return "-1"; answer = [...answer].sort((a, b) => b - a).join(""); return answer.startsWith("0") ? "0" : answer; }
리팩토링된 코드가 성능 면에서 앞의 코드보다 더 효율적인 이유:
1) 중복 코드 제거: 리팩토링된 코드에서는 `countOccurrences()` 함수를 통해 중복 코드를 제거하였습니다. 이 함수를 사용하여 배열의 요소를 순회하면서 요소의 개수를 카운트하기 때문에 불필요한 반복이 제거되어 효율적인 처리가 가능합니다.
2) 객체의 속성 활용: `findIntersection()` 함수에서는 객체의 속성을 활용하여 교집합을 계산하였습니다. 객체의 속성은 직접 접근하여 확인하는 것이 `Set` 객체를 사용하는 것보다 더 효율적입니다.
3) 문자열 처리 개선: 리팩토링된 코드에서는 `repeat()` 메서드를 사용하여 문자열을 반복하여 추가하였습니다. 이를 통해 반복문을 사용하는 대신 문자열을 한 번에 추가하므로 처리 속도가 향상됩니다.
4) 불필요한 변수 사용 제거: 리팩토링된 코드에서는 불필요한 변수 사용을 제거하였습니다. 예를 들어, `xArr`와 `yArr` 배열을 사용하지 않고 직접 `X`와 `Y`를 활용하였습니다. 이는 메모리 사용과 처리 시간을 절약하는 데 도움이 됩니다.
5) 조건문 개선: 리팩토링된 코드에서는 `startsWith()` 메서드를 사용하여 `answer` 문자열이 `'0'`으로 시작하는지 확인하는 조건문을 개선하였습니다. 이를 통해 문자열을 비교하는 단순한 조건 비교로 처리되므로 성능이 향상됩니다.728x90반응형'CS > 코딩 테스트' 카테고리의 다른 글
[레벨1] 삼총사 - 자바스크립트에서 조합은 어떻게 구할까? (0) 2023.09.16 [레벨2][파이썬] 더 맵게 (0) 2023.07.18 [레벨1][파이썬] 숫자 짝궁 (0) 2023.07.17 [레벨2] [3차] n진수 게임 (0) 2023.07.15 [레벨2] 멀리 뛰기 (0) 2023.05.22 다음글이 없습니다.이전글이 없습니다.댓글