[python] 문장 s가 주어질 때, 단어를 거꾸로 출력하는 함수_ReverseSentence
[문제 설명]
알파벳 대/소문자와 숫자 그리고 구분자인 마침표("."), 쉼표(","), 느낌표("!"), 물음표("?"), 스페이스(" ")로 이뤄진 문장이 있습니다. 문장 내에는 구분자를 기준으로 단어를 구분합니다.
문장 s가 주어질 때, 단어를 거꾸로 출력하는 함수, solution을 완성해주세요.
예를 들어, 문장 "Hello, World?"가 주어진다고 가정할 때, 구분자를 기준으로 구분된 단어는 "Hello", "World"이며, 단어를 거꾸로 출력한 결과는 ["olleH", "dlroW"] 입니다.
[입력 형식]
- s는 길이가 1 이상 1000 이하의 문자열입니다.
[출력 형식]
- 단어를 거꾸로 치환한, 문자열로 이뤄진 배열을 출력합니다.
- 비어있는 단어는 제거하고 출력합니다.
[풀이]
def solution(s):
s = s.replace(".", " ").replace(",", " ").replace("!", " ").replace("?", " ")
reversed_s = s[::-1]
ss = reversed_s.split()
reversed_ss = ss[::-1]
return reversed_ss
[해설]
1. 우선 구분자가 여러 개이므로 replace()를 이용하여 구분자를 하나(위 코드의 경우 공백으로)로 통일시킨다.
2. slice로 문자열을 한 번 뒤집어주었다. (slice는 문자열을 뒤집는 여러 방법 중 가장 간단한 방법)
3. split으로 구분자(공백)으로 나누어진 문자열을 나눈다.
4. 나누어진 문자열 리스트를 다시 한 번 뒤집어 준 후 return 한다.
[느낀점]
처음에는 문자를 하나하나 나누어 뒤집거나 split으로 나눈 문자를 하나하나 뒤집고 다시 배열에 넣는 방법으로 코드를 작성했었다. 하지만 그렇게 될 경우 연산이 복잡해지고 쓸모없는 연산이 너무 많아졌다.
리스트가 아닌 문자열 혹은 문자 하나하나가 요소로 들어간 리스트를 뒤집을 때에는 slice나 reversed()를 한 번만 사용하면 뒤집을 수 있기 때문에 많은 풀이법이 있었지만 이 경우 구글링을 해도 방법을 찾기가 어려웠다.
그러다가 문자열을 뒤집고 이후에 리스트 자체를 뒤집는 방식을 고안하게 되었고, 테스트해보니 잘 실행되는 것을 알 수 있었다.
다만, 풀이과정에서 변수를 여러 번 지정하였기 때문에 이 부분을 더 깔끔하게 만들 수 있는 방법이 있을까 생각한다.
[github] - sol1