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