[백준 9093] 단어 뒤집기

2020. 7. 2. 22:27Algorithm/practice

백준에 있는 브론즈 문제 최대한 많이 풀어보기 도전

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

 

9093번: 단어 뒤집기

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

www.acmicpc.net

1. stack 사용

첫 번째 방법

파이썬에서는 list 자료형이 stack 자료구조를 띈다. 입력 받은 sentence를 한 글자(c)씩 확인하였다. 그 때 글자가 ' '이거나 sentence의 맨 뒤에 오는 글자라면 stack에서 pop하였다. 하지만 맨 뒷글자인 경우에 stack에 추가해주어야 한다.

def myReverse(sentence):
    answer, stack, cnt = '', [' '], 0
    for c in sentence:
        cnt += 1
        if c == ' ' or cnt == len(sentence):
            if cnt == len(sentence):
                stack.append(c)
            while stack:
                answer += stack.pop()
        stack.append(c)
    print(answer)

for _ in range(int(input())):
    myReverse(input())

두 번째 방법

문자열 함수인 split()를 활용하여 sentence의 단어별로 words 배열에 저장하였다. 순서대로 words 배열의 원소를 word에 저장한다. word를 리스트로 변환하여 wordStack이라는 변수에 할당하여 wordStack이 빌 때까지 pop하여 answer에 저장하였다. 이는 word당 하나의 stack을 배정한 것이다.   

def myReverse(words):
    answer = ''
    for word in words:
        wordStack = list(word)
        while wordStack:
            answer += wordStack.pop()
        answer += ' '
    print(answer)
for _ in range(int(input())):
    myReverse(input().split())

2. map, lambda 사용

for _ in range(int(input())):
    sentence = list(map(lambda x: ''.join(reversed(x)), input().split()))
    print(' '.join(sentence))

'Algorithm > practice' 카테고리의 다른 글

[백준 2523번] 별찍기-13  (0) 2020.07.08
[백준 1110번] 더하기 사이클  (0) 2020.07.08
[백준 10996번] 별찍기-21  (0) 2020.07.08
[백준 11279번] 최대 힙  (0) 2020.05.28
[백준 1697번] 숨바꼭질  (0) 2020.05.22