문제

 

풀이 코드

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 가 종료되는 시점에서도 해당 문자열에 문자요소가 남아있다면 비워주어야 했다.

+ Recent posts