문제
풀이 코드
let inputs = readLine()!
var noReverse = ""
var total = ""
for w in inputs {
if w == "<" {
noReverse.append(w)
if !total.isEmpty {
reversePrint(total, nil)
total = ""
}
} else if w == ">" {
noReverse.append(w)
print(noReverse, terminator: "")
noReverse = ""
} else {
if noReverse.first == "<" {
noReverse.append(w)
} else if w != " "{
total.append(w)
} else {
reversePrint(total, " ")
total = ""
}
}
}
if !total.isEmpty {
reversePrint(total, nil)
}
func reversePrint(_ total: String, _ space: String?) {
print(String(total.reversed()), terminator: space ?? "")
}
풀이 과정
고민을 많이 했던 문제였다.
처음에는 공백을 기준으로 나누고 단어에 '<' 나 '>' 가 포함되어 있으면 그대로 출력하고,
그렇지 않으면 reversed를 사용하여 뒤집어 출력하게 시도했다.
하지만 이렇게 하면
" <hel le>le < dsa >dlae "
이런 형식일때, 제대로 출력하지 못하게 되었고, 고민을 하다가 스택을 이용해서 요소 하나하나를 꺼내주고 < 와 >를 만날때 적절히 처리해야하나..? 고민을 했다.
그러다가 그냥 if 문을 사용하여 구현하기로 했다.
< 가 있다면 별도의 string 에 해당 문자를 넣어주고,
> 를 만나면 문자가 들어있는 문자열을 출력해주고 해당 문자열을 비워 주었다.
그렇지 않은 경우 또 다른 문자열에 넣어 주었고, " " 의 공백을 만나는 기점으로 반전하여 출력하고, 해당문자열을 비워 주었다.
그렇게만 하고 시도 했지만 틀렸다는 결과를 보았고,
< 를 만나기 전, 반전해야 하는 문자가 들어있는 문자열이 비워있지 않으면 반전시켜 출력하고 해당 문자열을 비워주어야 했고,
Loop 가 종료되는 시점에서도 해당 문자열에 문자요소가 남아있다면 비워주어야 했다.