DEV

LeetCode #1768쉬움

1768. 번갈아 문자열 합치기

1768. Merge Strings Alternately

String
해설 읽기 3
javascript

문제 설명

두 문자열 word1와 word2가 주어집니다. word1로 시작하여 번갈아가며 문자를 추가하여 문자열을 병합하세요. 만약 한 문자열이 다른 문자열보다 길다면, 병합된 문자열 끝에 나머지 문자를 추가하세요. 병합된 문자열을 반환합니다.

예제

예제 1

입력: word1 = "abc", word2 = "pqr"
출력: "apbqcr"
설명:  병합된 문자열은 다음과 같이 병합됩니다:

예제 2

입력: word1 = "ab", word2 = "pqrs"
출력: "apbqrs"
설명:  word2가 더 길기 때문에 "rs"가 끝에 추가됩니다.

예제 3

입력: word1 = "abcd", word2 = "pq"
출력: "apbqcd"
설명:  word1이 더 길기 때문에 "cd"가 끝에 추가됩니다.

예제 4

입력: word1 = "abc", word2 = "pqr"
출력: "apbqcr"
설명:  병합된 문자열은 다음과 같이 병합됩니다:

예제 5

입력: word1 = "ab", word2 = "pqrs"
출력: "apbqrs"
설명:  word2가 더 길기 때문에 "rs"가 끝에 추가됩니다.

예제 6

입력: word1 = "abcd", word2 = "pq"
출력: "apbqcd"
설명:  word1이 더 길기 때문에 "cd"가 끝에 추가됩니다.

⚠️제약 조건

  • 1 <= word1.length, word2.length <= 100

  • word1와 word2는 소문자 영어 문자로 구성되어 있습니다.

해결 방법

🎯접근 방식

이 문제는 두 문자열을 번갈아가며 병합하는 간단한 문자열 조작 문제입니다. 알고리즘은 두 문자열의 길이 중 더 짧은 길이만큼 반복하면서 각 문자열의 문자를 번갈아가며 결과 문자열에 추가하고, 남은 부분은 길이가 더 긴 문자열의 나머지 부분을 그대로 붙여줍니다. 핵심 아이디어는 두 문자열을 번갈아가며 병합하고, 길이가 더 긴 문자열의 남은 부분을 결과 문자열에 추가하는 것입니다.

솔루션 코드

복잡도 분석

시간 복잡도:O(n)
공간 복잡도:O(n)

💡상세 설명

이 문제는 두 문자열 word1word2를 번갈아 가며 문자를 합치는 것입니다. 만약 두 문자열의 길이가 다르다면, 더 긴 문자열의 남은 부분을 결과 문자열 끝에 추가합니다. 이제 주어진 코드를 단계별로 설명하겠습니다.

1. 알고리즘의 핵심 아이디어

이 알고리즘의 핵심은 두 문자열을 번갈아 가며 하나씩 문자를 추가하는 것입니다. 두 문자열 중 더 짧은 길이만큼 번갈아 가며 문자를 추가하고, 남은 부분은 더 긴 문자열의 나머지 부분을 추가하여 완성합니다.

2. 코드의 주요 로직 설명

  • 먼저 두 문자열의 길이를 비교하여 더 짧은 길이(min)와 더 긴 길이(max)를 찾습니다.
  • 짧은 길이만큼 반복문을 돌면서 두 문자열의 각 문자를 번갈아 가며 결과 문자열에 추가합니다.
  • 반복문이 끝난 후, 더 긴 문자열의 남은 부분을 결과 문자열에 추가합니다.

3. 각 단계별 동작 과정

  1. 길이 비교 및 설정:

    let min = Math.min(word1.length, word2.length)
    let max = Math.max(word1.length, word2.length)
    

    여기서 min은 두 문자열 중 더 짧은 길이를, max는 더 긴 길이를 나타냅니다. 이 값들은 반복문을 돌리는 기준이 됩니다.

  2. 남은 문자열 저장:

    let word1Remain = word1.substring(min, max);
    let word2Remain = word2.substring(min, max);
    

    substring 메소드를 사용하여 짧은 길이 이후의 문자열을 각각 저장합니다. 두 문자열 중 하나는 빈 문자열이 될 것입니다.

  3. 문자 번갈아 추가:

    for (let i = 0; i < min; i++) {
        let mergeStr = `${word1[i]}${word2[i]}`
        result += mergeStr
    }
    

    for 반복문을 통해 min 길이만큼 두 문자열의 각 문자를 번갈아 result에 추가합니다.

  4. 남은 문자열 추가:

    return `${result}${word1Remain}${word2Remain}`
    

    번갈아 추가한 문자열 뒤에 남은 부분(word1Remain 또는 word2Remain)을 붙여 최종 결과를 반환합니다.

4. 핵심 변수들의 역할

  • minmax: 두 문자열의 길이를 비교하여 반복문과 남은 문자열 처리를 위한 기준을 제공합니다.
  • word1Remainword2Remain: 두 문자열의 번갈아 추가 후 남은 부분을 저장합니다.
  • result: 최종 결과 문자열을 저장합니다.

5. 왜 이 방법이 효과적인지

이 방법은 두 문자열의 길이를 비교하여 더 짧은 길이만큼만 반복문을 돌리므로 효율적입니다. 또한, substring을 사용하여 남은 문자열을 쉽게 추가할 수 있어 코드가 간결합니다. 이 알고리즘은 문자열의 길이에 따라 O(n) 시간 복잡도로 동작하며, 여기서 n은 더 긴 문자열의 길이입니다. 이러한 방식은 문제의 요구사항을 정확하고 효율적으로 해결합니다.

관련 문제