본문 바로가기
자료구조&알고리즘/leetcode 풀이

swift 리트코드 문제풀이 - leetcode 344 문자열 뒤집기

by 인생여희 2022. 7. 21.

swift 리트코드 문제풀이 - leetcode 344 문자열 뒤집기

 

문제

문자열을 뒤집는 함수를 작성하라. 입력값은 문자 배열이며, 리턴 없이 리스트 내부를 직접 조작하라.

 

예제1:

Input: s = ["h","e","l","l","o"]

Output: ["o","l","l","e","h"]

 

예제 2:

Input: s = ["H","a","n","n","a","h"]

Output: ["h","a","n","n","a","H"]

 

문제를 보고 아 이번문제도 문자열을 뒤집는 문제구나 잠깐! 생각을 했음..

 

알고리즘 문제가 그렇게 간단할리 없지..

 

문제를 자세히 보면 리턴 없이! , 리스트 내부를 직접 조작! 이라는 말이 있다. 

 

즉 이 문제는 새로운 배열을 할당하지 말고 배열의 포인터를 사용해서 배열 안의 문자를 거꾸로 만드는 문제다!

 

참고로 스위프트 함수의 인자는 상수로서 변경을 할 수 없다. 함수의 인자에 접근해서 값을 변경해주고 싶으면 인자뒤에 : 를 붙이고 inout이라는 키워드를 작성해 주어야 한다는것!

 

var inputArray: [Character] = ["h","e","l","l","o"]  
func reverseString(_ s: inout [Character]) {
    
    var length = s.count
    var index = 0
    while 0 < length {
        
        if let lastElement = s.popLast() {
            s.insert(lastElement, at: index)
        }
        length -= 1
        index += 1
    }
}

reverseString(&inputArray)

print("inputArray : \( inputArray ) ")  //inputArray : ["o", "l", "l", "e", "h"]

 

풀이는 while문을 만들어서 입력받은 배열의 마지막의 문자를 꺼내서 제일 앞으로 보내주는데 배열의 개수 만큼 반복하게 끔 작성해서 완료!

 

함수에 인자를 전달할 때도 인자 앞에 &를 붙여서 주소를 전달 할 수 있도록 하면된다

 

그럼 끝!

 

 

 

 

https://leetcode.com/problems/reverse-string/