백준 17413

justhaza.log·2023년 7월 29일

알고리즘: BOJ

목록 보기
9/125

문제

https://www.acmicpc.net/problem/17413

코드

import sys

str = sys.stdin.readline().rstrip() + " "
temp = ""
ans = ""
tag = False

for ch in str:
    if ch == "<":
        ans += temp[::-1]
        temp = ""

        tag = True
        ans += ch
    elif ch == ">":
        ans += ch
        tag = False
    elif ch == " ":
        if tag:
            ans += ch
        else:
            ans += temp[::-1]
            temp = ""

            ans += ch
    # 알파벳 또는 숫자인 경우            
    else:
        if tag:
            ans += ch
        else:
            temp += ch

print(ans)

태그 안에도 공백(' ')이 존재할 수 있다는 조건 때문에 어려움을 느꼈다.
이 부분은 tag라는 boolean 변수로 해결할 수 있었다.

만약 tag = True이면, 현재 태그 안을 지나고 있는 상황이기 때문에 공백이 나타나더라도 해당 공백을 그냥 ans에 추가하면 된다.
만약 tag = False이면, 단어 사이의 공백이므로 지금까지 temp에 저장된 단어만 뒤집어서 ans에 추가해 준다. 그리고 새로운 단어가 시작될 테니 temp = ""로 초기화한다.

또 헷갈렸던 부분은 '<'를 만났을 때이다.
공백뿐만 아니라 '<'를 만났다는 건, 어떤 단어가 끝났다는 의미이기 때문에 역시 단어를 뒤집어서 ans에 추가해 주고 temp를 초기화해줘야 한다.
더불어 새로운 태그가 시작된다는 의미이므로 tag = True로 설정하고, '<'를 ans에 추가한다.

그리고 사용자 입력에 ' '을 추가해야 한다.
왜냐하면 공백이 추가되어야 마지막 단어 또는 태그가 ans에 들어갈 수 있기 때문이다.

기타

문제가 어렵진 않은데 막막한 부분이 있다. 문제를 풀면서 익숙해져야 할 것 같다.

profile
알고리즘이나 SQL 문제 풀이를 올리고 있습니다. 피드백 환영합니다!

1개의 댓글

comment-user-thumbnail
2023년 7월 29일

좋은 정보 얻어갑니다, 감사합니다.

답글 달기