https://www.acmicpc.net/problem/9093
9093번: 단어 뒤집기
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는
www.acmicpc.net
단어 뒤집기 성공다국어
문제
문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다.
입력
첫째 줄에 테스트 케이스의 개수 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
문제를 풀기 위해 알아야 할 것
1. split() 함수
split은 문자열을 쪼갤때 사용하는 함수로 () 괄호 안에 아무것도 없을 시 기본으로 공백을 기준으로 문자열을 나눈다.
split(' ') 과 split()은 같은 역할을 한다.
split(',')를 입력할 시에는 , 를 기준으로 문자열을 슬라이싱 해준다.
사용 예시
sentence1 = 'i am happy'
sentnece2 = 'i,am,happy'
a1 = sentence1.split(' ')
b1= sentnece2.split(',')
print(f'a1 : {a1} , b1 : {b1}')
a2 = sentence1.split(',')
b2 = sentnece2.split(' ')
print(f'a2 {a2} , b2 : {b2}')
위처럼 두가지 경우로 입력을 했을때의 결과는 아래와 같다
a1 : ['i', 'am', 'happy'] , b1 : ['i', 'am', 'happy']
a2 ['i am happy'] , b2 : ['i,am,happy']
문자에 공백을 기준으로 슬라이싱 했을때 공백이 없으면 슬라이싱 되지 않은채로 출력이 된다.
공백이 아닌 다른문자도 마찬가지 이다.
2. [::-1]
[::-1]은 문자열에서 역순으로 하나씩 잘라서 문자열을 출력한다
인덱스를 기준 문자열[-1] 자르고 문자열[-2] 자르고 문자열[-3] 자르고 →
문자열을 뒤에서부터 하나씩 잘라서 거꾸로 출력을 할 수 있다.
<사용 예시>
sentence1 = 'I am happy today'
sentnece2 = 'We want to win the first prize'
print(sentence1[::-1])
print(sentnece2[::-1])
출력 결과
yadot yppah ma I
ezirp tsrif eht niw ot tnaw eW
3. join() 함수
join 함수는 리스트형에 대해 쓸 수 있는 함수 이다.
이번 문제에서는 문자열에 split() 함수를 사용하면 자동으로 리스트 형이 되므로
이때 join()함수를 사용해서 다시 문자열로 합칠 수 있다.
() 괄호 안에는 구분하려는 기호를 넣으면 그 구분기호에 따라 문자열이 합쳐진다.
('') : 공백없이 문자열 합치기
(' ') : 공백하나 넣고 문자열 합치기
('_') : _ 넣고 문자열 합치기
<사용 예시>
list = ['I', 'am', 'happy', 'today']
a = ('').join(list) #''.join(list)
b = (' ').join(list) #' '.join(list)
c = ('_').join(list) #'_'.join(list)
리스트를 만들어 놓고 각각 다른 구분기호로 문자열을 합친다.
추가 = ()가 안들어가도 join함수는 사용가능하다!
<출력 결과>
Iamhappytoday
I am happy today
I_am_happy_today
이로써 문제를 풀기 위한 개념들을 정리해 보았다.
문제 9093번의 나의 정답은 이렇다.
나의 코드
t = int(input())
sentence = []
for i in range(t):
sentence.append(input())
for j in range(t):
a = sentence[j][::-1].split()
print((' ').join(a[::-1]))
먼저 입력받는 테스트 케이스의 개수 t를 int 형으로 입력 받는다
그리고 문장을 담을 list를 sentence로 정의 해준다.
for 문을 사용하여 입력받은 테스트 케이스의 횟수만큼 문장을 입력받는다.(append)
입력 받은 문장을 [::-1]로 뒤집어 준 뒤 split()함수를 사용하여 나눈다
split으로 나누어준 list는 다시한번 뒤집어주고 join함수를 이용해 공백을 넣어 문장을 다시 합쳐준다.
진행 과정을 표시한 코드
t = int(input())
sentence = []
for i in range(t):
sentence.append(input())
#1
#i am happy 입력
print(f'sentence : {sentence}')
#출력 결과 sentence : ['i am happy']
print(f'split : {sentence[0].split()}')
#출력 결과 split : ['i', 'am', 'happy']
print(f'split[::-1] : {sentence[0][::-1].split()}')
#출력 결과 split[::-1] : ['yppah', 'ma', 'i']
for j in range(t):
a = sentence[j][::-1].split()
print(f'a : {a}')
#출력 결과 a : ['yppah', 'ma', 'i']
print(f'a[::-1] : {a[::-1]}')
#출력 결과 a[::-1] : ['i', 'ma', 'yppah']
print((' ').join(a[::-1]))
#출력 결과 i ma yppah
'개발공부 > 문제풀이' 카테고리의 다른 글
백준 10819 : 차이를 최대로 파이썬(python) (0) | 2021.12.28 |
---|---|
백준 21756 : 지우개 파이썬(python) (0) | 2021.12.27 |
백준 1026 파이썬(python) pop과 remove (0) | 2021.12.11 |
백준 10610 : 30 파이썬 풀이(python) (0) | 2021.12.10 |
백준 1546 평균 python 풀이 (0) | 2021.12.02 |