[백준] 단어순서 뒤집기(Python)

규갓 God Gyu·2024년 7월 25일

백준

목록 보기
26/96

문제

스페이스로 띄어쓰기 된 단어들의 리스트가 주어질때, 단어들을 반대 순서로 뒤집어라. 각 라인은 w개의 영단어로 이루어져 있으며, 총 L개의 알파벳을 가진다. 각 행은 알파벳과 스페이스로만 이루어져 있다. 단어 사이에는 하나의 스페이스만 들어간다.

입력

첫 행은 N이며, 전체 케이스의 개수이다.

N개의 케이스들이 이어지는데, 각 케이스는 스페이스로 띄어진 단어들이다. 스페이스는 라인의 처음과 끝에는 나타나지 않는다. N과 L은 다음 범위를 가진다.

N = 5
1 ≤ L ≤ 25

출력

각 케이스에 대해서, 케이스 번호가 x일때 "Case #x: " 를 출력한 후 그 후에 이어서 단어들을 반대 순서로 출력한다.

예제 입력 1

3
this is a test
foobar
all your base

예제 출력 1

Case #1: test a is this
Case #2: foobar
Case #3: base your all

최종 코드

import sys

def read_input():
  try:
    with open('input.txt', 'r') as f:
      # 줄바꿈 기준 처리 + 양 옆 공백 제거
      data = f.read().strip().split('\n')
  except FileNotFoundError:
    # 줄바꿈 기준 처리 + 양 옆 공백 제거
    data = sys.stdin.read().strip().split('\n')
  return data
data = read_input()

# 전체 케이스
N = int(data[0])
# 각 케이스
cases = list(map(str, data[1:N+1]))

for i in range(0, N):
  # 문자 각각 분리해서 리스트
  words = cases[i].split()
  # 뒤집어서 문자열화
  reversed_words = ' '.join(reversed(words))
  print(f"Case #{i+1}: {reversed_words}")

풀이 과정

  • 일단 cph와 터미널에서 둘다 디버깅할 수 있도록 sys관련 입력처리
  • 전체 케이스 개수 N 각 케이스들에 대한 값 cases에 list로 담기, 단 여기서 \n 즉, 줄 바꿈 기준 묶어주었으므로
['3','this is a test'] 

이런식으로 data안에 값이 담겨있는 상태다

  • N범위만큼 0부터 돌아가면서 리스트 안의 i번째 인덱스 안에 값을 띄어쓰기 기준으로 다시 새로운 리스트인 words에 담았고,
    for문의 해당 i가 끝나기 전에 그 words 리스트를 reversed메서드로 뒤집어준 후 문자열화 시키는 join을 통해 최종 문자열을 reversed_words 변수에 담았다
  • 그 담에 출력까지 진행시키면 한번의 i에 대하여 한줄의 print까지 출력하게 된다.
profile
웹 개발자 되고 시포용

0개의 댓글