문자열 myString이 주어집니다. "x"를 기준으로 해당 문자열을 잘라내 배열을 만든 후 사전순으로 정렬한 배열을 return 하는 solution 함수를 완성해 주세요.
단, 빈 문자열은 반환할 배열에 넣지 않습니다.
1 ≤ myString ≤ 100,000
myString은 알파벳 소문자로 이루어진 문자열입니다.
myString | result |
---|---|
"axbxcxdx" | ["a","b","c","d"] |
"dxccxbbbxaaaa" | ["aaaa","bbb","cc","d"] |
입출력 예 설명
입출력 예 #1
myString을 "x"를 기준으로 자른 배열은 ["a","b","c","d"]이며, 이 배열은 이미 사전순으로 정렬된 상태입니다. 따라서 해당 배열을 return 합니다.입출력 예 #2
myString을 "x"를 기준으로 자른 배열은 ["d","cc","bbb","aaaa"]이며, 이 배열을 사전순으로 정렬하면 ["aaaa","bbb","cc","d"]입니다. 따라서 해당 배열을 return 합니다.
function solution(myString) {
const strArr = myString.split('x').sort();
return strArr.filter(el => el !== '');
}
뭐든지 문제의 지문을 제대로 봐야하는 것 같다.
문제의 지문을 볼 때 단, 빈 문자열은 반환할 배열에 넣지 않습니다.
라는 멘트가 있다.
초반엔 sort()로 정렬할 경우 배열 0번째 요소에만 빈 문자열이 들어가
if(strArr[0] === '') strArr.shift()
했다.
허나 그건 해당 문제만 그런거지 다른 문제의 경우 여러개의 빈 문자열이 나올 수 있다.
이를 위해 filter로 요소(el)가 ''(빈 문자열)
가 아닌 경우만 반환하게 했다.
const solution=s=>s.match(/[^x]+/g).sort()
이분은 match메소드를 사용하셨다.
이럴 경우 빈 문자열은 나오지 않을 것 같다.
match
문자열이 정규식과 매치되는 부분을 검색합니다.
-출처 : mdn
function solution(myString) {
return myString
.split("x")
.filter((str) => str !== "")
.sort();
}
나와 동일한 방식으로 코드를 작성했는데 가독성이 좋아 보여 가져와봤다.
이번 문제의 핵심은 단, 빈 문자열은 반환할 배열에 넣지 않습니다.
라는 멘트를 확인하고
예외처리를 어떻게 할 것인가가 핵심인거 같다.