문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다.
첫째 줄에 테스트 케이스의 개수 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
import sys
def main():
test_case = int(input())
for case in range(test_case):
sentence = sys.stdin.readline().split()
print(' '.join(i[::-1] for i in sentence))
if __name__ == "__main__":
main()
자료구조로 문제였지만, Python,JS로 코딩테스트를 준비하기 때문에 슬라이싱으로 푸는게 더 좋다고 생각해서 이렇게 구현. 입력 스트립과 슬라이싱 개념을 다시 한 번 되집어 보는 시간을 가지려고 개념을 정리해둠.
sys : 표준 라이브러리 모듈
studin : 표준 입력 스트립 객체
readline : 한줄씩 읽기(대신 입력 끝인 \n 포함) 메서드
split() : 특정 구분자를 list형태로 반환하는 메서드
strip() : 처음과 끝 공백 문자 제거 메서드(타입은 string)
join : 리스트 튜플 등을 문자열로 반환
입력 방식의 일관성 : input()과 sys.stdin.readline()는 다르게 버퍼링 됨. 따라서 일관된 방법으로 입력 처리
코드 가독성 향상 및 함수 분리 : 뒤집어 반환하는 것도 함수로 분리
에러 처리 추가
import sys
def reverse_words_in_sentence(sentence: str) -> str:
words = sentence.split()
reversed_words = [word[::-1] for word in words]
return ' '.join(reversed_words)
def main():
input = sys.stdin.read().splitlines()
if not input:
return
try:
test_case = int(input[0])
except (ValueError, IndexError):
print("첫 번째 입력은 정수여야 합니다.")
return
for i in range(1, test_case + 1):
if i >= len(input):
print(f"{test_case}개의 테스트 케이스를 입력해야 합니다.")
break
sentence = input[i]
reversed_sentence = reverse_words_in_sentence(sentence)
print(reversed_sentence)
if __name__ == "__main__":
main()