ABOUT ME

작은 디테일에 집착하는 개발자

Today
-
Yesterday
-
Total
-
  • [LeetCode] 1768. Merge Strings Alternately
    IT Study/LeetCode 2025. 1. 18. 17:32
    728x90

    출처 : https://leetcode.com/studyplan/leetcode-75/

    코딩 테스트에 대한 감을 잃었다. 차근히 다시 시작해보자.

     

     

    1. 문제

    더보기

     

    문제 설명

    두 개의 문자열 word1과 word2가 주어졌을 때, 다음 규칙에 따라 문자열을 병합합니다.

    1. word1과 word2의 문자를 번갈아가며 추가합니다.
    2. 두 문자열 중 하나가 더 길다면, 남은 문자를 병합 결과 뒤에 추가합니다.

     

    예시

    • 입력: word1 = "abc", word2 = "pqr" → 출력: "apbqcr"
    • 입력: word1 = "ab"word2 = "pqrs" → 출력: "apbqrs"

     

    실제 문제

    You are given two strings word1 and word2. Merge the strings by adding letters in alternating order, starting with word1. If a string is longer than the other, append the additional letters onto the end of the merged string.
    Return the merged string.
    
    
    Example 1:
    
    Input: word1 = "abc", word2 = "pqr"
    Output: "apbqcr"
    
    
    Example 2:
    
    Input: word1 = "ab", word2 = "pqrs"
    Output: "apbqrs"
    
    
    Example 3:
    
    Input: word1 = "abcd", word2 = "pq"
    Output: "apbqcd"
    
    
    Constraints:
    
    1 <= word1.length, word2.length <= 100
    word1 and word2 consist of lowercase English letters.

     

     

     

    2. 첫 풀이

    더보기

     

    해결 방법

    문제는 다음과 같이 풀이했다.

    1. StringBuilder 사용
      • 병합된 결과 문자열을 효율적으로 저장하기 위해 사용
      • 문자열 추가: append()
      • 최종 문자열 반환: toString()
    2. length 속성으로 문자열 길이 확인
      • 각 문자열의 길이를 계산하여 반복문을 설정
    3. for 반복문으로 번갈아 문자 추가
      • minOf()를 사용해 두 문자열의 최소 길이만큼 반복
        • 실제 코드에서는 minOf를 통해 두 문자열의 최소 길이를 구하지 않았다.
        • if 문을 사용했다 (헤헷)
        • 다음엔 minOf로 간단히 구해보도록 하겠다.
      • result.append(word1[i]) → word1에서 i번째 문자 추가
      • result.append(word2[i]) → word2에서 i번째 문자 추가
    4. substring으로 남은 문자 추가
      • 더 긴 문자열의 나머지 부분을 병합 결과에 추가

     

    실제 코드

    class Solution {
        fun mergeAlternately(word1: String, word2: String): String {
            var result = StringBuilder()
    
            val length1 = word1.length
            val length2 = word2.length
            
            var minLength = 0
            var backString = ""
    
            if (length1 > length2) {
                minLength = length2
                backString = word1.substring(length2, length1)
    
            } else {
                minLength = length1
                backString = word2.substring(length1, length2)
            }
    
            for (i in 0 until minLength) {
                result.append(word1[i])
                result.append(word2[i])    
            }
            
            return result.append(backString).toString()
        }
    }

     

     

     

    3. 배운 점

    더보기

     

    주요 개념

    그래서 이 문제를 통해 다시 상기시킨 주요 문법은 다음과 같다.

    1. 문자열 반복 처리
      • for (char in text) → 문자열의 각 문자를 순회
      • for (i in 0 until m) → 인덱스 기반 순회 (0 ~ m-1)
    2. 문자열 길이
      • text.length → 문자열 길이 반환
    3. StringBuilder 사용법
      • 문자열 추가: builder.append("text")
      • 문자 추출: builder[i]
      • 최종 문자열: builder.toString()
    4. 문자열 추출
      • text.substring(n, m) → 문자열의 n번째부터 m-1번째까지 추출

     

    실제 메모

    1. how to use for
    
    1-1. with String
    for (char in text) {
      print(char)
    }
    
    1-2. for ~ until
    for (i in 0 until m) {
      // 0 ~ m-1
    }
    
    1-3. for ~ ..
    for (i in 0..m) {
     // 0 ~ m
    }
    
    2. how to get string length
    text.length
    
    3. add or get String with StringBuilder()
    val builder = StringBuilder()
    
    3-1. add String
    builder.append("")
    
    3-2. get Char in String(StringBuilder)
    builder.substring(i)
    
    3-3. print String with StringBuilder
    builder.toString()
    
    4. get string of specific digits from string
    text.substring(n, m + 1) // get string in n ~ m

     

    'IT Study > LeetCode' 카테고리의 다른 글

    [LeetCode] 1071. Greatest Common Divisor of Strings  (0) 2025.01.19
Designed by Tistory.