문제 설명
두 문자열 word1와 word2가 주어집니다. word1로 시작하여 번갈아가며 문자를 추가하여 문자열을 병합하세요. 만약 한 문자열이 다른 문자열보다 길다면, 병합된 문자열 끝에 나머지 문자를 추가하세요. 병합된 문자열을 반환합니다.
예제
예제 1
예제 2
예제 3
예제 4
예제 5
예제 6
⚠️제약 조건
- •
1 <= word1.length, word2.length <= 100
- •
word1와 word2는 소문자 영어 문자로 구성되어 있습니다.
해결 방법
🎯접근 방식
이 문제는 두 문자열을 번갈아가며 병합하는 간단한 문자열 조작 문제입니다. 알고리즘은 두 문자열의 길이 중 더 짧은 길이만큼 반복하면서 각 문자열의 문자를 번갈아가며 결과 문자열에 추가하고, 남은 부분은 길이가 더 긴 문자열의 나머지 부분을 그대로 붙여줍니다. 핵심 아이디어는 두 문자열을 번갈아가며 병합하고, 길이가 더 긴 문자열의 남은 부분을 결과 문자열에 추가하는 것입니다.
솔루션 코드
복잡도 분석
O(n)O(n)💡상세 설명
이 문제는 두 문자열 word1과 word2를 번갈아 가며 문자를 합치는 것입니다. 만약 두 문자열의 길이가 다르다면, 더 긴 문자열의 남은 부분을 결과 문자열 끝에 추가합니다. 이제 주어진 코드를 단계별로 설명하겠습니다.
1. 알고리즘의 핵심 아이디어
이 알고리즘의 핵심은 두 문자열을 번갈아 가며 하나씩 문자를 추가하는 것입니다. 두 문자열 중 더 짧은 길이만큼 번갈아 가며 문자를 추가하고, 남은 부분은 더 긴 문자열의 나머지 부분을 추가하여 완성합니다.
2. 코드의 주요 로직 설명
- 먼저 두 문자열의 길이를 비교하여 더 짧은 길이(
min)와 더 긴 길이(max)를 찾습니다. - 짧은 길이만큼 반복문을 돌면서 두 문자열의 각 문자를 번갈아 가며 결과 문자열에 추가합니다.
- 반복문이 끝난 후, 더 긴 문자열의 남은 부분을 결과 문자열에 추가합니다.
3. 각 단계별 동작 과정
-
길이 비교 및 설정:
let min = Math.min(word1.length, word2.length) let max = Math.max(word1.length, word2.length)여기서
min은 두 문자열 중 더 짧은 길이를,max는 더 긴 길이를 나타냅니다. 이 값들은 반복문을 돌리는 기준이 됩니다. -
남은 문자열 저장:
let word1Remain = word1.substring(min, max); let word2Remain = word2.substring(min, max);substring메소드를 사용하여 짧은 길이 이후의 문자열을 각각 저장합니다. 두 문자열 중 하나는 빈 문자열이 될 것입니다. -
문자 번갈아 추가:
for (let i = 0; i < min; i++) { let mergeStr = `${word1[i]}${word2[i]}` result += mergeStr }for반복문을 통해min길이만큼 두 문자열의 각 문자를 번갈아result에 추가합니다. -
남은 문자열 추가:
return `${result}${word1Remain}${word2Remain}`번갈아 추가한 문자열 뒤에 남은 부분(
word1Remain또는word2Remain)을 붙여 최종 결과를 반환합니다.
4. 핵심 변수들의 역할
min과max: 두 문자열의 길이를 비교하여 반복문과 남은 문자열 처리를 위한 기준을 제공합니다.word1Remain과word2Remain: 두 문자열의 번갈아 추가 후 남은 부분을 저장합니다.result: 최종 결과 문자열을 저장합니다.
5. 왜 이 방법이 효과적인지
이 방법은 두 문자열의 길이를 비교하여 더 짧은 길이만큼만 반복문을 돌리므로 효율적입니다. 또한, substring을 사용하여 남은 문자열을 쉽게 추가할 수 있어 코드가 간결합니다. 이 알고리즘은 문자열의 길이에 따라 O(n) 시간 복잡도로 동작하며, 여기서 n은 더 긴 문자열의 길이입니다. 이러한 방식은 문제의 요구사항을 정확하고 효율적으로 해결합니다.