[알고리즘 문제 풀이][파이썬] 백준 17413번: 단어 뒤집기 2

염지현·2022년 3월 17일
0

BOJ

목록 보기
7/22

백준 17413 문제 링크: https://www.acmicpc.net/problem/17413

📑 문제 설명

입력받은 문자열을 뒤집는 프로그램을 작성.

  • 단, '<'와 '>' 사이에 있는 단어는 뒤집히지 않음
  • 띄어쓰기를 기준으로 단어가 나누어지며, 문장의 전체 순서가 아닌 단어만 뒤집어야 함.

입력: 뒤집고자 하는 문장
출력: 조건에 맞추어 뒤집어진 문장

💡 문제 해결 방법

단어를 뒤집을 때 발생하는 예외처리를 먼저 정리한 후 코딩하면 효율적으로 작성할 수 있다.
내가 생각한 예외처리는
1) 2, 3, 4 을 제외한 다른 기호를 마주쳤을 때(알파벳, 숫자, '<'와 '>'를 제외한 특수문자)

  • 2, 3, 4를 제외한 기호이기 때문에 임시저장 리스트에 append 해준다.

2) '<'를 마주쳤을 때

  • 임시 저장 리스트 size가 0이 아니라면(=이미 단어가 나온 상태라면) 임시저장 리스트를 역순으로 출력한 후 임시저장 리스트를 clear() 한다.
  • 임시 저장 리스트 size가 0이라면(=아직 나온 단어가 없거나, clear()한 후라면), '>' 기호가 나올 때까지 순서대로 출력한다.

3) ' '를 마주쳤을 때

  • 임시 저장 리스트 size가 0이 아니라면(=이미 단어가 나온 상태라면) 임시저장 리스트를 역순으로 출력한 후 임시저장 리스트를 clear() 한다.
  • 임시 저장 리스트 size가 0이라면(=아직 나온 단어가 없거나, clear()한 후라면), ' ' 그대로 출력한다.

4) '\n'를 마주쳤을 때

  • 임시 저장 리스트 size가 0이 아니라면(=이미 단어가 나온 상태라면) 임시저장 리스트를 역순으로 출력한 후 임시저장 리스트를 clear() 한다.
  • 임시 저장 리스트 size가 0이라면(=아직 나온 단어가 없거나, clear()한 후라면), '\ㅜ' 그대로 출력한다.

💻 코드

import sys
def reverse(sentence):
    temp_word = list()
    i = 0
    while(i < len(sentence)):
        if (sentence[i] == '<'):
            if(len(temp_word)>0):
                for w in range(len(temp_word)- 1, -1, -1):
                    print(temp_word[w], end = "")
                temp_word.clear()
            while (sentence[i] != '>'):
                print(sentence[i], end="")
                i += 1
            print(sentence[i], end="")
            i += 1
        elif (sentence[i] == ' '):
            if(len(temp_word)>0):
                for w in range(len(temp_word) - 1, -1, -1):
                    print(temp_word[w], end="")
                print(sentence[i], end="")
                temp_word.clear()
                i += 1

            else:
                print(" ")
                i += 1

        elif (sentence[i] == "\n"):
            if (len(temp_word) > 0):
                for w in range(len(temp_word)- 1, -1, -1):
                    print(temp_word[w], end = "")
                print(sentence[i], end= "")
                temp_word.clear()
                i += 1

            else:
                print("\n")
                i += 1

        else:
            temp_word.append(sentence[i])
            i += 1

if __name__ == '__main__':
    sentence = sys.stdin.readline()
    reverse(sentence)

💟 추가적으로 알게 된 점

  • 예외 처리의 중요성

0개의 댓글