LeetCode - merge-strings-alternately
2025-03-10
- LeetCode
- JavaScript
정답 (맞음/틀림)
/**
* @param {string} word1
* @param {string} word2
* @return {string}
*/
var mergeAlternately = function(word1, word2) {
// alternating order -> Feels like two pointer
// Giving one of the array as a standard - shorter one and make other increment - If same just word1
// At the end add the rest if left into new answer variable
var word1_longer = word1.length >= word2.length ? true : false;
console.log(word1_longer)
var pointer = 0;
var answer = '';
// Make a flag to distinguish the longer one so that it's easiler to add the rest
if(word1_longer){
while(pointer <= word2.length-1){
answer+=word1[pointer];
answer+=word2[pointer];
pointer++;
}
for(let i=pointer; i<word1.length; i++){
answer+=word1[i]
}
} else {
while(pointer <= word1.length-1){
answer+=word1[pointer];
answer+=word2[pointer];
pointer++;
}
for(let i=pointer; i<word2.length; i++){
answer+=word2[i]
}
}
return answer
};
정답 (더 나은 성능)
/**
* @param {string} word1
* @param {string} word2
* @return {string}
*/
var mergeAlternately = function(word1, word2) {
let answer = [];
let i = 0, len1 = word1.length, len2 = word2.length;
while (i < len1 || i < len2) {
if (i < len1) answer.push(word1[i]);
if (i < len2) answer.push(word2[i]);
i++;
}
return answer.join('');
};
개선된 코드의 설명
현재 코드도 잘 작동하지만, 몇 가지 최적화를 적용하면 더 간결하고 효율적으로 만들 수 있습니다.
개선점
- 불필요한 조건문 제거
word1_longer
플래그와if-else
구문 없이 하나의 반복문으로 처리할 수 있습니다.
while
루프 하나로 해결- 두 단어를 동시에 처리하고, 한 쪽이 먼저 끝나면 나머지를 바로 추가하는 방식으로 개선할 수 있습니다.
- 문자열 연결 최적화
+=
연산자는 문자열을 새로 생성하므로,Array.join('')
을 사용하면 성능이 더 좋을 수 있습니다.
/**
* @param {string} word1
* @param {string} word2
* @return {string}
*/
var mergeAlternately = function(word1, word2) {
let answer = [];
let i = 0, len1 = word1.length, len2 = word2.length;
while (i < len1 || i < len2) {
if (i < len1) answer.push(word1[i]);
if (i < len2) answer.push(word2[i]);
i++;
}
return answer.join('');
};
변경된 사항 및 이점
-
단일
while
루프로 로직 단순화- 두 개의
while
과for
루프가 필요 없이 하나의while
루프로 해결했습니다. - 두 문자열의 길이에 상관없이 같은 방식으로 처리 가능.
- 두 개의
-
배열을 이용해 문자열 연결 성능 최적화
answer.push()
를 사용하여 배열에 추가 후join('')
으로 문자열을 만드는 방식이 성능적으로 유리합니다.+=
연산자는 반복할 때마다 새로운 문자열을 생성하므로, 긴 문자열일 경우 성능 차이가 발생할 수 있음.
-
코드 가독성 향상
if-else
대신 단순히 조건을 검사해서push()
하는 방식으로 줄였기 때문에 코드가 더 깔끔해짐.
-
최적화
시간 복잡도(O(N))는 동일
두 코드 모두 단 한 번의 반복문을 사용하여 두 문자열을 순회하므로 O(N)입니다. 즉, word1.length + word2.length = N 이라고 하면, O(N) 입니다. 공간 복잡도 차이
기존 코드에서는 문자열 answer를 직접 +=로 누적 → 문자열은 불변(immutable)이므로 매번 새로운 문자열이 생성됨. 최적화 코드에서는 배열 answer[]에 값을 추가한 후 join('')을 사용 → 성능 개선 가능. 즉, 메모리 효율성 측면에서 배열 사용 후 join('')이 더 유리할 수 있음.
Algorithm ...
LeetCode -...