CodeWars 10: Dubstep

문제설명

Polycarpus works as a DJ in the best Berland nightclub, and he often uses dubstep music in his performance. Recently, he has decided to take a couple of old songs and make dubstep remixes from them.
폴리카퍼스는 벌렌드 나이트클럽의 최고의 DJ입니다. 특히 덥스텝 쪽 음악이 주특기죠. 최근, 그는 몇 개의 옛날음악들을 그 만의 덥스텝 리믹스로 만들기로 했습니다.

Let's assume that a song consists of some number of words (that don't contain WUB). To make the dubstep remix of this song, Polycarpus inserts a certain number of words "WUB" before the first word of the song (the number may be zero), after the last word (the number may be zero), and between words (at least one between any pair of neighbouring words), and then the boy glues together all the words, including "WUB", in one string and plays the song at the club.
원 곡들은 당연하지만 수 많은 단어들로 이루어져있습니다.(여기엔 WUB라는 단어는 없죠) 덥스텝풍으로 리믹스를 하기위해서 폴리카퍼스는 "WUB"라는 단어를 곡 중간 중간마다 끼워넣기로 합니다. 단어 사이사이 마다 무조건 1개 이상은 넣어야되며, 단 문장의 처음과 마지막엔 안 넣을 수도 있습니다. 이렇게 리믹스된 가사들은 WUB라는 단어로 결합된 하나의 긴 문자열 형식을 띄게되며 클럽음악으로 거듭나게 됩니다.

For example, a song with words "I AM X" can transform into a dubstep remix as "WUBWUBIWUBAMWUBWUBX" and cannot transform into "WUBWUBIAMWUBX".
예를들어 "I AM X"라는 가사가 있다면 덥스텝리믹스 풍 가사는 "WUBWUBIWUBAMWUBWUBX"가 됩니다. "WUBWUBIAMWUBX"는 제대로 리믹싱 된게 아닙니다.(단어 사이에 WUB가 빠져있음)

Recently, Jonny has heard Polycarpus's new dubstep track, but since he isn't into modern music, he decided to find out what was the initial song that Polycarpus remixed. Help Jonny restore the original song.
최근, 조니는 폴리카퍼스의 신규 덥스텝 트랙을 들었습니다. 사실 그는 리믹스된 음악보단 옛날 원 곡을 좋아하기 때문에 폴리카퍼스가 리믹스 하기전 가사가 궁금해졌고, 복원을 하고 싶어졌습니다. 자 이제 당신이 한 번 도와주시겠어요?

제한사항

입력
주어진 리믹스된 가사는 대문자로만 구성되며 200자를 넘지않습니다. 아무 단어도 없는 가사는 주어지지않습니다.

출력
띄어쓰기가 제대로 적용된(한칸띄기) 복원된 가사를 출력해주세요.
가사의 처음과 끝에는 띄어쓰기가 들어가면 안 됩니다. ' I AM X ' -> 올바른 가사가 아닙니다.

입출력 예시

song_decoder("WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB")
  # =>  WE ARE THE CHAMPIONS MY FRIEND

풀이

import re
def song_decoder(song):
    return re.sub('\s+', ' ', song.replace("WUB", " ")).strip()
  1. 공백에 포커스해서 변환시켜봤습니다. 우선 "WUB"를 공백처리를 해줍니다. 단어 사이사이에 "WUB"의 개수는 랜덤이므로 공백의 길이가 천차만별이 되게됩니다.
  2. 일단 strip()을 써서 글자 좌우(처음과끝)의 공백자를 제거해줍니다.
  3. 정규식을 통해 공백자 한 칸 이상인 모든 공백자를 강제로 한 칸 짜리 공백으로 바꿔줍니다.

다른풀이

import re
def song_decoder(song):
    return re.sub('(WUB)+', ' ', song).strip()

방식은 거의 동일하나 아예 한 개 이상의 WUB를 한 칸짜리 공백으로 치환하고 스트립 처리만 했습니다.
과정이 1개가 줄어들었네요.

import re
def song_decoder(song):
    return " ".join(song.replace('WUB', ' ').split())

split()은 공백을 기준으로 문자열들을 요소화시켜서 리스트에 담아줍니다. 이를 다시 " "(한칸공백)과 join시켜주면 됩니다.

좋은 웹페이지 즐겨찾기