풀이


꺽쇠를 기준으로 문자열을 뒤집거나 그대로 출력하는 구현문제이다.

처음 아이디어는 열리는 꺽쇠를 기준으로 뒤집는 기능을 Boolean 형태로 구분해서 시도했다.

  1. app = True 일 경우 꺽쇠가 등장했다는 의미는 꺽쇠가 닫힐때까지 그대로 출력

  2. app = False 일 경우 temp 에 문자열을 저장해뒀다가 꺽쇠나 공백이 등장할 경우 temp 를 거꾸로 출력

  3. 공백이 등장할 경우 그대로 출력

위 세가지 아이디어를 종합해 코드를 짰고 문제를 풀 수 있었다.

이후 정답자들의 풀이를 참고했고 훨씬 쉽게 접근할 수 있었다는 점을 알게되었다.

꺽쇠를 기준으로 split 함수를 활용하기 위해 임의의 문자 ”@” 를 추가하여 ”@” 를 기준으로 문자열을 split한다.

그 후 공백을 제외한 각 문자열들을 통해

  1. 꺽쇠를 포함할 경우 그대로

  2. 공백을 포함할 경우 공백을 제외한 문자열을 거꾸로

  3. 나머지 문자열은 거꾸로

위 세가지 구현을 통해 보다 쉽게 해결할 수 있었다.

소스코드


import sys
 
input = sys.stdin.readline
 
# 첫 풀이
s = input().rstrip()
temp = ""
ans = ""
app = False
 
for i in s:
    if i == "<":
        app = True
    elif i == ">":
        ans += i
        app = False
        continue
    elif i == " ":
        if len(temp) != 0:
            ans += temp[::-1]
            temp = ""
        ans += i
        continue
 
    if app == True:
        if len(temp) != 0:
            ans += temp[::-1]
            temp = ""
        ans += i
    else:
        temp += i
    
print(ans + temp[::-1])
 
# 정답 참고 후 풀이
s = input().rstrip()
s = s.replace("<", "@<")
s = s.replace(">", ">@")
ss = s.split("@")
ans = ""
 
for i in ss:
    if len(i) != 0:
        if "<" in i:
            ans += i
        elif " " in i:
            l = [t[::-1] for t in i.split()]
            ans += " ".join(l)
        else:
            ans += i[::-1]
 
print(ans)

References