[LeetCode] [Swift] 1678. Goal Parser Interpretation

doyeonjeong_·2022년 9월 9일
0

LeetCode

목록 보기
5/5
post-thumbnail

문제

1678. Goal Parser Interpretation

문제파악하기

  • 주어진 문자열 command를 Parse 하여 알맞게 출력하는 문제
  • 만약 "G()(al)"으로 주어진다면
    G -> G
    () -> o
    (al) -> al
    이렇게 바꿔주면 된다.

내가 한 방법은
1. 문자열을 인덱스로 탐색하기 좋게 Array로 바꿔준다.
2. 답을 담을 ans 변수 선언
3. 문자열의 길이 -1 만큼 탐색한다.
4. 현재 문자가 "G" 라면 ans += "G"
5-1. 현재 문자가 "(" 라면 그 다음 문자가 ")" 인지 아닌지 구별한다.
5-2. 그 다음 문자가 ")"라면 ans += "o", "a"라면 ans += "al"
6. for문은 맨 마지막 글자를 탐색하지 않기 때문에 한번 더 탐색해주고
")"이 아니라면 마지막 글자를 넣어준다.

풀이

class Solution {
    func interpret(_ command: String) -> String {
        var str = Array(command)
        var ans:String = ""
        
        for i in 0 ..< str.count - 1 {
            if str[i] == "G" {
                ans += "G"
            } else if (str[i] == "(") && (str[i+1] == ")") {
                ans += "o"
            } else if (str[i] == "(") && (str[i+1] == "a") {
                ans += "al"
            }
        }
        if str.last! != ")" {
            ans += String(str.last!)
        }

        return ans
    }
}

🤔 FEEDBACK

처음엔 while문으로 문자열을 마지막부터 하나씩 빼가면서 비교했는데 너무 느렸다.
이렇게되면 command의 전체를 확인해야하기 때문에 O(n),
거기에 removeLast()를 계속 반복하기 때문에 O(1)을 또 반복해서 그랬다.
단순 for문을 구현하지 않으려다가 더 늦은 알고리즘을 구현했었다;


profile
블로그 이사중 🚚 byukbyak.tistory.com

0개의 댓글