Daeng iOS

[프로그래머스 코테 기초 Swift] #2-5 문자열 겹쳐쓰기 본문

알고리즘 & 코딩테스트/프로프래머스

[프로그래머스 코테 기초 Swift] #2-5 문자열 겹쳐쓰기

U_Daeng 2024. 3. 11. 19:48

프로그래머스 코딩 기초 트레이닝의 Day2은 "출력, 연산"에 관한 문제다

🗒️ 문제

 

✏️ 내 풀이 

import Foundation

func solution(_ my_string:String, _ overwrite_string:String, _ s:Int) -> String {
    let myStrArr = Array(my_string)
    let overwriteArr = Array(overwrite_string)
    var result: [Character] = []
    var resultStr = ""
    for i in 0..<s {
    result.append(myStrArr[i])
    }
    for i in 0..<overwriteArr.count {
        result.append(overwriteArr[i])
    }
    for i in (s+overwriteArr.count)..<myStrArr.count {
            result.append(myStrArr[i])
    }

    for i in result {
        resultStr += String(i)
    }
        return resultStr
}

어케 꾸역꾸역 풀긴 했지만 굉장히 복잡시럽게 풀어낸..

중간에 포기하고싶었지만 그래도 포기하지 않고 풀어냈다는 것에 칭찬을 합니다..

 

풀이를 설명하자면,

먼저 주어진 문자열들을 인덱스로 접근하기위해서 배열로 변환해주었다 

그리고 Character을 요소로하는 빈 배열을 만들어놓고 필요한 것들을 넣어줬다

 

1) s 전까지는 처음 주어진 myStrArr에서 가져와서 붙인다

2) overwriteArr을 전부 붙인다

3) myStrArr에서 (s + overwriteArrr의 개수) 만큼의 위치부터 끝까지를 붙여준다  

 

위 세가지를 마친 후에 완성된 배열의 요소 하나하나를 String으로 변환해줘서 

미리 만들어둔 빈 String에 붙여준 것.. 

 

 

🔍 다른 풀이 및 공부

1) 
func solution(_ myString: String, _ overwriteString: String, _ s: Int) -> String {
    var myString = Array(myString)
    myString.replaceSubrange(s...(overwriteString.count+s-1), with: Array(overwriteString))
    return String(myString)
}

2) 
func solution(_ my_string:String, _ overwrite_string:String, _ s:Int) -> String {
    let a = my_string.prefix(s)
    let b = overwrite_string
    let c = my_string.suffix(my_string.count - overwrite_string.count - s)
    return a + b + c
}

3)
func solution(_ my_string:String, _ overwrite_string:String, _ s:Int) -> String {
    let startIdx = my_string.index(my_string.startIndex, offsetBy: 0)
    let endIdx = my_string.index(my_string.endIndex, offsetBy: 0)
    let newStartIdx = my_string.index(my_string.startIndex, offsetBy: s)
    let newEndIdx = my_string.index(my_string.startIndex, offsetBy: s + overwrite_string.count)

    return "\(my_string[startIdx..<newStartIdx])\(overwrite_string)\(my_string[newEndIdx..<endIdx])"
}

 

1번 방법)

replaceSubrange를 사용하여 문자열을 대체한다. (replaceSubrange()정리글)

 

2번 방법)

prefix 로 완성돼야하는 문자열의 앞 부분에 필요한 문자열을 떼오고, (prefix() 정리글)

suffix 로 뒷 부분에 필요한 문자열을 떼와서 이어붙인다. (suffix() 정리글)

 

3번 방법)

바꿔야하는 부분의 인덱스 자체를 저장해놓고 문자열에서 해당 인덱스에 해당하는 문자열끼리 이어 붙인다.

.startIndex .endIndex를 구할 수 있다 

 


* prefix / suffix 에 대해 설명을 잘 해두신 zedd님 블로그