-
[알고리즘/자바스크립트] 특정문자 공백으로 치환해서 return하기 (Dubstep)Algorithm 2019. 2. 17. 13:26
-해당 문제는 codewars사이트의 level6 문제입니다.(1~8단계 중 8단계가 가장 쉬운 레벨)-
[문제] 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.
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.
For example, a song with words "I AM X" can transform into a dubstep remix as "WUBWUBIWUBAMWUBWUBX" and cannot transform into "WUBWUBIAMWUBX".
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.
Input:
The input consists of a single non-empty string, consisting only of uppercase English letters, the string's length doesn't exceed 200 characters
Output:
Return the words of the initial song that Polycarpus used to make a dubsteb remix. Separate the words with a space.
Examples:
songDecoder("WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB")
// => WE ARE THE CHAMPIONS MY FRIEND
Test:
Test.assertEquals(songDecoder("AWUBBWUBC"), "A B C","WUB should be replaced by 1 space");
Test.assertEquals(songDecoder("AWUBWUBWUBBWUBWUBWUBC"), "A B C","multiples WUB should be replaced by only 1 space");
Test.assertEquals(songDecoder("WUBAWUBBWUBCWUB"), "A B C","heading or trailing spaces should be removed");
[해석] 노래 제목이 I AM X라고 쳤을 때 그 단어의 공백 대신 WUB를 넣어서 제목을 만들어놨다.
예를 들면 WUBIWUBAMWUBX 이런식으로.
근데 WUB를 다 빼고 대신 공백을 넣어서 다시 원래 제목인 I AM X로 돌려놓아라.
다만, 조건1) WUB가 중간에 2번, 3번 들어가있어도 무조건 하나의 공백으로만 대체되어야 한다.
조건2) 글자 맨 앞과 뒤의 공백은 삭제되어야한다.
나의 풀이는 이렇다.
function songDecoder(song){ var arr = song.split('WUB') var songName = '' for (var word of arr) { if (word !== '') { songName += word+' ' } } return songName.trim() }
일단 노래제목을 WUB단어를 기준으로 split을 하여 배열로 만든다.
그리고 배열요소를 for-of문으로 탐색하여 ''가 아닌 단어인 경우에
songName이란 빈값에 공백과 함께 붙인다.
맨 마지막에 trim함수를 써서 앞뒤 공백을 제거한다.
짝짝짝!
다른 방식으로 풀어보고 싶어서
다음과 같이 시도해보았는데 문제가 있다.
function songDecoder(song){ var i = song.indexOf('WUB'); while(i > -1) { song = song.replace('WUB', ' ') i = song.indexOf('WUB') } return song.trim() }
먼저 노래제목에 WUB란 단어가 있는지 indexOf로 검사해본다.
-1이 return되면 WUB란 글자가 없다는 뜻이니
-1이 return되기 전까지 WUB를 공백으로 replace시킨다.
이 방법의 문제는 WUB가 여러개 들어간 경우에 공백에 여러개 생긴다는 문제가 있다.
근데 어떻게 해결해야할지 아직 방법을 못찾았다ㅜㅜ..
계속 생각해봐야지.
반응형'Algorithm' 카테고리의 다른 글
[알고리즘/자바스크립트] 삼각형 판별문제 (Is this a triangle?) (0) 2019.02.18 [알고리즘/자바스크립트] 완벽한 제곱근 구하기 (Find the next perfect square!) (0) 2019.02.18 [알고리즘/자바스크립트] 마지막 4글자 제외하고 #으로 치환하기 (Credit Card Mask) (0) 2019.02.17 [알고리즘/자바스크립트] 최소값 구하기 / 단어 중 가장 길이가 짧은 단어의 length를 구하기 (Shortest Word) (252) 2019.02.17 [알고리즘/자바스크립트] 약수 구하는 알고리즘 (Find the divisors!) (127) 2019.02.17 COMMENT