티스토리 뷰

728x90

https://school.programmers.co.kr/learn/courses/30/lessons/120895

 

문제 사진

내 풀이

import Foundation

func solution(_ my_string:String, _ num1:Int, _ num2:Int) -> String {
    var resultString: [Character] = Array(my_string)
    var tempArr: [Character] = []
    tempArr.append(Array(my_string)[num1])
    tempArr.append(Array(my_string)[num2])
    resultString[num1] = tempArr.popLast()!
    resultString[num2] = tempArr.popLast()!
    return String(resultString)
}
  1. my_string도 파라미터라 불변값이니 변수에 할당해주기
  2. 빈 배열에 num1, num2 인덱스의 요소 넣기
  3. pop으로 my_string 결과값 변경

문제에선 파라미터 num1, num2의 값이 항상 있을거라는 제약조건이 있어 force unwrapping(!) 을 사용했지만 좋아보이진 않는다.

다른사람의 풀이

joined()

func solution(_ my_string:String, _ num1:Int, _ num2:Int) -> String {
    var arr = my_string.map{String($0)}
    let temp = arr[num1]
    arr[num1] = arr[num2]
    arr[num2] = temp
    return arr.joined()
}

굳이 append, pop을 하지 않아도 arr변수에 index만 바꿔줌으로써 결과를 낼 수 있다.

 

swapAt(_:_:)

func solution(_ my_string:String, _ num1:Int, _ num2:Int) -> String {
    var arr = Array(my_string)
    arr.swapAt(num1, num2)
    
    return String(arr)
}
solution("hello", 1, 2)

// "hlelo"

 

 

배운것

1. String.Element == Charactor

2. joined()

 

연결된 배열의 배열 요소를 반환합니다.

 

예제

// 1
var testArr = ["a", "b", "c", "q"]

var 합체 = testArr.joined()
print(합체)
// abcq

// 2  (joined(separator: ", ") 요소마다 , 간격을 두고 [String] -> String타입으로 합침
let cast = ["Vivien", "Marlon", "Kim", "Karl"]
let list = cast.joined(separator: ", ")
print(list)
// Vivien, Marlon, Kim, Karl

// 3 
let ranges = [0..<3, 8..<10, 15..<17]

for range in ranges {
  print(range)
}
// Prints "0..<3"
// Prints "8..<10"
// Prints "15..<17"

//  joined()를 사용하여 각 range별 요소에 접근할 수 있습니다.
for index in ranges.joined() {
    print(index, terminator: " ")
}
// Prints: "0 1 2 8 9 15 16"

 

 

3. swapAt(_:_:)

파라미터 i 와 j 의 순서를 바꾼다.

 

func solution(_ my_string:String, _ num1:Int, _ num2:Int) -> String {
    var arr = Array(my_string)
    arr.swapAt(num1, num2)
    
    return String(arr)
}
solution("hello", 1, 2)

// "hlelo"

 

이게 최고의 방법인것 같다.. 

다다익메서드 

728x90