안녕하세요!!
오늘 문제는 백준 9093번, 단어 뒤집기 문제입니다.
코테는 쉽지않지만 오늘도 발전해봅시다. 문제 들어가볼까요?
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 128 MB | 41110 | 22049 | 16666 | 54.598% |
문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다.
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 공백이 하나 있다.
각 테스트 케이스에 대해서, 입력으로 주어진 문장의 단어를 모두 뒤집어 출력한다.
2
I am happy today
We want to win the first prize
I ma yppah yadot
eW tnaw ot niw eht tsrif ezirp
ICPC > Regionals > Asia Pacific > Korea > Asia Regional - Taejon 2001 PA번
이 방법은 스택 자료구조를 활용하여 각 단어를 뒤집는 방식입니다. 스택은 LIFO(Last In, First Out) 구조를 가지고 있기 때문에, 단어의 문자를 스택에 하나씩 넣고, 공백을 만났을 때 스택에서 문자를 하나씩 꺼내어 단어를 뒤집어 출력할 수 있습니다.
import sys
from collections import deque
T = int(sys.stdin.readline().strip())
for _ in range(T):
sentences = sys.stdin.readline().strip()
sentences += ' ' # 마지막 단어를 뒤집기 위해 공백 추가
stack = deque()
for j in sentences:
if j != " ":
stack.append(j) # 단어의 문자를 스택에 넣음
else:
while stack:
print(stack.pop(), end='') # 스택에서 문자를 꺼내어 뒤집기
print(' ', end='') # 단어 간의 공백 출력
print()
이 방법은 Python의 문자열 슬라이싱 기능을 활용하여 단어를 뒤집는 방식입니다. Python의 슬라이싱 기능을 사용하면 손쉽게 문자열을 뒤집을 수 있습니다.
import sys
T = int(sys.stdin.readline().strip())
for _ in range(T):
sentences = sys.stdin.readline().split() # 공백을 기준으로 문장을 단어로 나눔
for i in sentences:
print(i[::-1], end=' ') # 각 단어를 뒤집어서 출력
print()
저도 처음에는 두 번째 방법을 사용해서 접근을 했습니다. 하지만 스택 유형으로도 풀 수 있는 문제입니다!
이 방법은 각 단어의 문자를 스택에 쌓고, 공백을 만날 때마다 스택에서 문자를 꺼내어 단어를 뒤집습니다.
n
이라고 할 때, 이 방법은 문장의 모든 문자를 한 번씩 순회합니다.append
연산(삽입)은 의 시간 복잡도를 가지며, 공백을 만났을 때 스택에서 문자를 꺼내는 pop
연산도 입니다.따라서, 전체 알고리즘의 시간 복잡도는 입니다.
이 방법은 Python의 슬라이싱 기능을 사용하여 각 단어를 뒤집습니다.
m
은 단어의 길이입니다.결과적으로, 전체 알고리즘의 시간 복잡도는 입니다. 여기서 n
은 문장 전체의 길이로, 모든 단어의 길이 합에 해당합니다.
두 방법 모두 시간 복잡도가 으로 동일합니다. 그러나 구현의 간결성과 메모리 사용 측면에서 차이가 있습니다.
각 상황에 맞게 두 방법 중 적합한 것을 선택하면 좋습니다.
이번 문제에서는 두 가지 접근 방식을 활용하여 단어를 뒤집는 문제를 해결했습니다. 스택을 활용한 방식과 문자열 슬라이싱을 활용한 방식은 각각의 장단점이 있습니다. 스택을 활용한 방식은 자료구조의 활용을 이해하는 데 도움이 되며, 문자열 슬라이싱을 활용한 방식은 Python의 기능을 효율적으로 사용하는 방법을 보여줍니다.
두 가지 방법 모두 단어를 뒤집는 문제를 효과적으로 해결할 수 있으므로, 상황에 따라 적합한 방법을 선택하면 좋을 것 같습니다.
읽어주셔서 감사합니다!
Let’s keep going! ⭐