Daeng iOS

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

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

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

U_Daeng 2024. 3. 11. 19:48

🗒️ 문제

 

✏️ 내 풀이 

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
}

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

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

 

🔍 다른 풀이 및 공부

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를 사용하여 문자열을 대체한다.

 

2번 방법)

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

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

 

3번 방법)

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

.startIndex .endIndex를 구할 수 있다 

 

 

 

그 다음은 suffix().. 이 함수도 파라미터에 따라 2가지가 있다 

 

suffix(_:)

컬렉션의 마지막 요소를 포함하여, 주어진 최대 길이까지의 서브 시퀀스를 반환한다.

prefix는 컬렉션의 앞부터 가져왔다면 suffix는 뒤에부터 가져온다는 의미

 

maxLength는 반환할 요소의 최대 수로, 0이상이어야 한다. 

 

suffix(from:)

지정된 위치부터 컬렉션의 끝까지 서브시퀀스를 반환한다 

 

start는 결과 시퀀스를 시작할 인덱스로, 컬렉션의 유효한 인덱스여야한다.

 

위와 같이 from이 1이면 인덱스 1부터 끝까지를 반환한다.

 

index(_:offsetBy:)

주어진 인덱스로부터 지정된 거리의 인덱스를 반환한다. 

 


joined() 참고 / map 참고 print() , readLine() 참고

 

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