본문 바로가기

백준

2024.7.13 백준(Python) 9093 단어 뒤집기

단어 뒤집기

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

입력

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

출력

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

예제 입력 1 

2
I am happy today
We want to win the first prize

예제 출력 1 

I ma yppah yadot
eW tnaw ot niw eht tsrif ezirp

 

정답 코드

import sys

# 테스트 케이스의 수를 입력 받음
N = int(input())

# 각 테스트 케이스에 대해 반복
for _ in range(N):
    # 입력 문자열을 읽고, 공백을 제거한 후 리스트로 변환
    string = list(input().strip())
    
    # 인덱스와 결과 리스트를 초기화
    i = 0
    result = []

    # 문자열을 처리하기 위한 무한 루프
    while 1:
        # 현재 문자가 공백인지 확인
        if string[i] == ' ' :
            # 공백을 결과 리스트에 추가
            result.append(" ")
            # 현재 위치부터 마지막 공백 또는 문자열의 시작까지 문자를 거꾸로 추가
            for a in range(i-1, -1, -1):
                if string[a] == ' ':
                    break
                result.append(string[a])
                # sys.stdout.write(string[a])

        # 문자열의 끝에 도달하지 않은 경우, 다음 문자로 이동
        if (i + 1) != len(string):
            i += 1
        else:
            # 문자열의 끝에 도달한 경우, 마지막 단어 처리
            i += 1
            result.append(" ")
            for a in range(i-1, -1, -1):
                if string[a] == ' ':
                    # sys.stdout.write(" ")
                    break
                result.append(string[a])
                # sys.stdout.write(string[a])
            break

    # 결과 리스트의 첫 번째 요소가 공백인 경우 제거
    if result[0] == " ":
        del result[0]
    
    # 결과 리스트를 문자열로 변환하여 출력
    result = ''.join(result)
    print(result)

 

정신없이 코드를 짜느라 맘에 들지 않는 코드 대충봐도 뭔가 효율적이지 않다

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