본문 바로가기

Algorithm 문제 풀이/python

[python] 백준 9093번 단어 뒤집기 문제 풀이

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

 

9093번: 단어 뒤집기

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는

www.acmicpc.net

 

 

 

 

문제

문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 공백이 하나 있다.

출력

각 테스트 케이스에 대해서, 입력으로 주어진 문장의 단어를 모두 뒤집어 출력한다.

 

 

 


 

 

💻 코드

 

 

1. sys.stdin.readline().rstrip()으로 풀기

 

 
import sys

T = int(input())

for _ in range(T):  # 테스트 개수만큼
    sentence = sys.stdin.readline().rstrip()  # 문장 입력 받기
    sentence += ' '  # 입력 받은 문자의 마지막에 공백을 추가하여 마지막 단어도 stack 리스트에서 꺼낼 수 있도록

    stack = list()

    for word in sentence:
        if word != ' ':
            stack.append(word)

        else:
            while stack:
                print(stack.pop(), end='')
            print(' ', end='')
    print()

 

 

 

2. input()으로 풀기

 

import sys

T = int(input())

for _ in range(T):  # 테스트 개수만큼
    sentence = input()  # 문장 입력 받기
    sentence += ' '  # 입력 받은 문자의 마지막에 공백을 추가하여 마지막 단어도 stack 리스트에서 꺼낼 수 있도록

    stack = list()

    for word in sentence:
        if word != ' ':
            stack.append(word)

        else:
            while stack:
                print(stack.pop(), end='')
            print(' ', end='')
    print()

 

 

 

 

📝 풀이

 

이 문제는 알고리즘 스택에 관련된 문제이기 때문에 다른 방법으로 쉽게 풀 수 있지만 스택으로 풀었다. 

 

문장을 입력 받을 때, 이 문자열을 변수에 저장 후에 그 문장의 끝에 공백을 추가해준다. 그 이유는 문장 전체가 아니라 단어 각각을 stack에 넣었다가 꺼내야 하기 때문에 공백을 기준으로 단어를 구분해주기 때문이다. 그런데 마지막은 원래 공백이 없기 때문에 추가해주지 않는다면 마지막 단어를 포함시켜주지 않기 때문에 공백을 추가해주어야 한다.

 

그리고 for문을 이용하여 sentence 문자열의 단어 각각에 접근한다. 만약 공백이 없다면 단어를 스택 리스트에 넣고 공백이라면 stack 리스트에 넣은 단어를 pop을 통해 꺼내 준다.

 

 

 

※ 시간 관련해서...

 

 

역시 C언어와 파이썬의 걸리는 시간 차이가 확연히 난다.

파이썬으로 했을 때 이 문제는 시간제한이 1초라 겨우 통과했지만 저번 문제처럼 0.5초였다면 통과하지 못했을 것이다.

 

파이썬에서 시간을 줄이는 방법은 저번처럼 입력을 받을 때 input대신 sys.stdin.readline()를 쓰는 것이다. 그런데 이 문제는 문자열을 다루기 때문에 input과 달리  sys.stdin.readline()은 개행 문자까지 같이 입력을 받기 때문에 rstrip()을 추가해서 개행 문자를 없애주어야 한다.

 

 

 

sys.stdin.readline().rstrip()으로 입력을 받았더니 시간이 거의 반으로 줄어든 것을 볼 수 있다.