문자열 myString이 주어집니다. myString을 문자 "x"를 기준으로 나눴을 때 나눠진 문자열 각각의 길이를 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
1 ≤ myString의 길이 ≤ 100,000
myString은 알파벳 소문자로 이루어진 문자열입니다.
입출력 예
myString | result |
---|---|
"oxooxoxxox" | [1, 2, 1, 0, 1, 0] |
"xabcxdefxghi" | [0, 3, 3, 3] |
입출력 예 설명
입출력 예 #1
"x"를 기준으로 문자열을 나누면 ["o", "oo", "o", "", "o", ""]가 됩니다. 각각의 길이로 배열을 만들면 [1, 2, 1, 0, 1, 0]입니다. 따라서 [1, 2, 1, 0, 1, 0]을 return 합니다.입출력 예 #2
"x"를 기준으로 문자열을 나누면 ["", "abc", "def", "ghi"]가 됩니다. 각각의 길이로 배열을 만들면 [0, 3, 3, 3]입니다. 따라서 [0, 3, 3, 3]을 return 합니다.
function solution(myString) {
const arr = myString.split('x')
return arr.map(el => el.length)
}
문제에서 'x'를 기준으로 문자열을 나누고 각 문자열을 길이 값으로 반환하는 문제였다.
split
는 해당 조건(문자열)을 기준으로 배열을 만들어 준다.
arr라는 변수에 split메소드를 활용해 문자열을 'x'기준으로 나눠준 배열을 할당한다.
map
메소드를 사용해 배열을 순회하고 요소의 길이를 반환해 주었다.
function solution(myString) {
return myString.split('x').map(el => el.length)
}
이렇게 한줄로 코드를 작성할 수 있지만
가독성이 떨어지는 것 같아
const arr = myString.split('x')
'x' 문자를 기준으로 나눈 배열을 따로 분리해 줬다.
const solution = (myString) => {
const arr = myString.split('x');
return arr.reduce((a,c)=>[...a,c.length],[]);
}
map메소드를 사용하신 분이 많으셨는데
이분은 reduce
메소드를 사용해 코드를 작성하셔서 가져와 봤다.