[Swift/프로그래머스] 문자열 섞기

sonny·2024년 11월 2일
3

TIL

목록 보기
29/48

나의 답)

import Foundation

func solution(_ str1:String, _ str2:String) -> String {
    var result = ""
    
    for (char1, char2) in zip(str1, str2) {
        result.append(char1)
        result.append(char2)
    }

    return result
}

zip을 이용하다

이걸 풀기 앞서 zip 이라는 함수를 먼저 공부해야했다.

zip의 기본 형태를 보자.

zip배열이나 문자열을 한 쌍으로 묶어서 새로운 시퀀스를 만드는 함수인데,

zip을 사용하면 두 시퀀스를 동시에 순회할 수 있다보니..

번갈아가며 값을 결합하거나 연산할 때 유용하다고 한다.

예시로 몇 개 작성해봤다.

출력이 번갈아가며 값이 나오는 걸 볼 수 있다.

zip 안에 있는 숫자와 값의 요소를 순서대로 한 쌍식 묶어주는 건데,

for 문에서 (num, letter) 형태로 각 쌍을 받아 사용할 수 있다.

문자열도 같은 방식으로 사용이 가능하다.

출력되는걸 확인해보니 내가 원하는 대로 나오는 것 같다.

혹시라도 만약 두 배열의 길이 다를 경우는 짧은 쪽의 길이에 맞춰 묶는데,

예를 들자면 [1, 2]["a", "b", "c"]zip 으로 묶으면

결과는 [(1,"a"),(2,"b")] 가 되는 것이다.

나머지 c는 나오지 않는다


문제 풀이로 돌아가보자

var result = ""

결합된 문자열을 저장할 빈 문자열을 미리 선언하는 셈이다.

result가 두 문자열을 번갈아가면서 추가한 결과를 담는 역할을 해주는 것이다.

    for (char1, char2) in zip(str1, str2) {
        result.append(char1)
        result.append(char2)
    }

zip(str1, str2)str1str2 의 각 문자를 쌍으로 묶어 순서대로 반환하게 되고,

for 은 각 쌍(char1, char2)을 반복하면서 resultchar1char2 를 차례대로 추가해준다.


[ append ]

append 메서드가 문자열이나 배열에 새로운 요소를 추가할 때 쓰이는건데,

예를 들어

var text = "Hello"
text.append("!")
print(text) 

이렇게 하게 되면 출력은 "Hello!" 가 된다.


아무튼 그렇게 마지막으로 result 문자열을 반환하면 값이 나오게 되는데,

아까 var result = "" 이렇게 한 부분을 설명했었던걸 기억해보자.

result 가 두 문자열을 번갈아가면서 추가한 결과를 담는 역할을 해주는 것이라고 했다.

마지막에 return result 을 했기 때문에 코드가 진행되면서 순차적으로 값이 쌓이게 될 것이다.

  • 초기 상태: result = ""
  • 첫 쌍을 추가한 후: result = "a1"
  • 두 번째 쌍을 추가한 후: result = "a1b2"
  • 세 번째 쌍을 추가한 후: result = "a1b2c3"

따라서 var result = "" 는 결합 과정에서 중간 결과를 누적하고 최종 결과를 반환하기 위해 필요하다.


음...

zip을 이용해서 각 문자열을 순회하는 방법을 알게 되었다.

zip은 두 데이터 세트를 병렬로 처리해야 하는 경우 매우 편리하다고 하니 쓰이는 순간 잘 기억해내야겠다 싶었다.

그리고 확실히 구글 검색을 이용하는 것 보다 swift에서 직접 메서드의 쓰임과 예제들을 보니 이해가 되었는데,

그동안 막연하게 영어라는 문턱으로 편하게 비로 구글링으로 알아보았지만....

앞으로 그런 검색 방법은 사용하지 않고 먼저 문법적으로 스위프트 안에서 직접 확인하고 그래도 모르겠다면 구글을 이용해봐야겠다.

몇 번의 삽질의 경험이 있어야 기억에 더 오래 남을 수 있다고 들었는데, 그 말이 정말 맞다.

profile
iOS 좋아. swift 좋아.

2개의 댓글

comment-user-thumbnail
2024년 11월 2일

주말 코테 맛도리

1개의 답글