728x90
반응형
문제 설명
문제 분석
- 두 정수 X, Y가 주어집니다.
- X, Y에서 공통으로 나타나는 숫자를 사용하여 만들 수 있는 가장 큰 정수를 찾아야 합니다.
- 공통된 숫자가 없다면 "-1", 공통된 숫자로 0밖에 만들 수 없다면 "0"을 반환합니다.
첫 번째 접근: O(n * m)
function solution(X, Y) {
let answer = ''
let [xLength, yLength] = [X.length, Y.length]
new Array(10).fill(0).forEach((_, i) => {
X = X.replaceAll(9 - i, '')
Y = Y.replaceAll(9 - i, '')
const count1 = xLength - X.length
const count2 = yLength - Y.length
if(count1 > 0 && count2 > 0)
answer += String(9 - i).repeat(Math.min(count1, count2))
xLength = X.length
yLength = Y.length
})
if(answer.length === 0) return '-1'
return answer * 1 === 0 ? '0' : answer
}
- 문자열을 직접 수정하면서 진행합니다.
- 길이 차이를 이용한 카운팅합니다.
두 번째 접근: O(n * m)
function solution(X, Y) {
let answer = ''
new Array(10).fill(0).forEach((_, i) => {
const count1 = X.length - X.replaceAll(9 - i, '').length
const count2 = Y.length - Y.replaceAll(9 - i, '').length
if(count1 > 0 && count2 > 0)
answer += (9 - i).toString().repeat(Math.min(count1, count2))
})
if(answer.length === 0) return '-1'
return [...new Set(answer)].join('') === '0' ? '0' : answer
}
개선 사항
- 불변성 유지
- 원본 문자열을 수정하지 않음
- 각 반복마다 새로운 길이 계산
- 가독성 향상
- 로직이 더 명확하고 이해하기 쉬움
- 중간 변수 사용 최소화
- 메모리 효율성
- 불필요한 중간 상태 저장 제거
- 한 번의 순회로 결과 도출
728x90
반응형
'자료구조 및 알고리즘 > JavaScript Practice' 카테고리의 다른 글
[프로그래머스] 성격유형 검사하기 (0) | 2025.01.23 |
---|---|
[프로그래머스] 체육복 (0) | 2024.12.31 |
[프로그래머스] 햄버거 만들기 (0) | 2024.12.30 |
[프로그래머스] 해시 - 완주하지 못한 선수 (0) | 2024.12.28 |
[프로그래머스] 로또의 최고 순위와 최저 순위 (0) | 2024.12.28 |