알고리즘/해결

LeetCode1528. Shuffle String

언클린 2020. 7. 30. 10:50
728x90

1. 문제(원본)

Given a string s and an integer array indices of the same length.

The string s will be shuffled such that the character at the ith position moves to indices[i] in the shuffled string.

Return the shuffled string.

 

Example 1:

Input: s = "codeleet", indices = [4,5,6,7,0,2,1,3] Output: "leetcode" Explanation: As shown, "codeleet" becomes "leetcode" after shuffling.

Example 2:

Input: s = "abc", indices = [0,1,2] Output: "abc" Explanation: After shuffling, each character remains in its position.

Example 3:

Input: s = "aiohn", indices = [3,1,4,2,0] Output: "nihao"

Example 4:

Input: s = "aaiougrt", indices = [4,0,2,6,7,3,1,5] Output: "arigatou"

Example 5:

Input: s = "art", indices = [1,0,2] Output: "rat"

 

Constraints:

  • s.length == indices.length == n
  • 1 <= n <= 100
  • s contains only lower-case English letters.
  • 0 <= indices[i] < n
  • All values of indices are unique (i.e. indices is a permutation of the integers from 0 to n - 1).

2. 문제

문자열을 입력받은 정수형 배열의 인덱스 값으로 재배열

3. 나의 답

class Solution {

    func restoreString(_ s: String, _ indices: [Int]) -> String {

        var result = s

        for (index, element) in s.enumerated() {

            result.remove(at: result.index(result.startIndex, offsetBy: indices[index]))

            result.insert(element, at: result.index(result.startIndex, offsetBy: indices[index]))

        }

        return result

    }

}

4. 다른 유저의 답

#1

class Solution {

    func restoreString(_ s: String, _ indices: [Int]) -> String {

        var str = Array<Character>(repeating: Character("a"), count: s.count)

        for (i, char) in s.enumerated() {

            str[indices[i]] = char

        }

        return String(str)

    }

}

5. 마무리

Character형으로 바꾼 후 재배열을 진행했으면 쉽게 진행할 수 있었는데 String형으로 어떻게 진행해보려고 하니까 뭔가 복잡해진 기분이 들었다. 간혹 알고리즘 구상 시 알아두면 좋은 팁들이 있다. 예를 들어 정수의 자릿수를 구할 때 String형으로 형 변환을 하고 그 카운트를 세면 간단히 자릿수를 구할 수 있다. 이러한 팁들을 많이 익히는 것이 시간 단축에 많은 도움이 된다고 생각한다.

728x90