알고리즘/해결

LeetCode942. DI String Match

언클린 2020. 3. 25. 21:19
728x90

1. 문제(원본)

Given a string S that only contains "I" (increase) or "D" (decrease), let N = S.length.

Return any permutation A of [0, 1, ..., N] such that for all i = 0, ..., N-1:

  • If S[i] == "I", then A[i] < A[i+1]
  • If S[i] == "D", then A[i] > A[i+1]

 

Example 1:

Input: "IDID" Output: [0,4,1,3,2]

Example 2:

Input: "III" Output: [0,1,2,3]

Example 3:

Input: "DDI" Output: [3,2,0,1]

 

Note:

  1. 1 <= S.length <= 10000
  2. S only contains characters "I" or "D".

2. 문제

"I" 와 "D" 를 입력하여 입력한 문자열의 수 + 1 의 0부터 시작하는 Int형 배열을 반환하라

"I" 일 경우 순차적으로 대입, "D" 일 경우는 역순으로 대입하라

3. 나의 답

class Solution {

    func diStringMatch(_ S: String) -> [Int] {

        var result: [Int] = [Int](repeating: 0, count: S.count + 1)

        var startIndex = 0

        var endIndex = S.count

 

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

            switch element {

            case "I":

                result[index] = startIndex

                startIndex += 1

            default:

                result[index] = endIndex

                endIndex -= 1

            }

        }

        result[S.count] = startIndex

        return result

    }

}

4. 다른 유저의 답

#1

class Solution {

    func diStringMatch(_ S: String) -> [Int] {

        var res:[Int] = [Int](repeating: 0, count:S.count + 1)

        var min = 0

        var max = S.count

        var arr = Array(S)

        for i in 0..<S.count {

            if arr[i] == "I"{

                res[i] = min

                min = min + 1

            }else{

                res[i] = max

                max = max - 1

            }

        }

        res[S.count] = min

        return res

    }

}

 

#2

class Solution {

    func diStringMatch(_ S: String) -> [Int] {

        var low = 0

        var high = S.count

        var result = [Int]()

        for char in S{

            if char == "I"{

                result.append(low)

                low += 1

            }

            else{

               //   char == "D"

                result.append(high)

                high -= 1

            }

        }

        result.append(high)

        return result

    }

}

5. 마무리

다른 유저들의 답도 거의 비슷하게 푼 것 같다. 아예 똑같은 방법인 유저도 있었다. 한 가지 아쉬운 것은 이것 또한 메모리 관련된 문제였기 때문에 수가 커질 수록 메모리에 부담이 있었다. 

728x90

'알고리즘 > 해결' 카테고리의 다른 글

LeetCode344. Reverse String  (0) 2020.03.31
LeetCode557. Reverse Words in a String III  (0) 2020.03.31
LeetCode561. Array Partition I  (0) 2020.03.25
LeetCode1051. Height Checker  (0) 2020.03.25
LeetCode728. Self Dividing Numbers  (0) 2020.03.25