개발일기

[JavaScript] 세 개의 구분자 본문

Algorithm

[JavaScript] 세 개의 구분자

황대성 2024. 6. 20. 10:50
문제

 

임의의 문자열이 주어졌을 때 문자 "a", "b", "c"를 구분자로 사용해 문자열을 나누고자 합니다.

예를 들어 주어진 문자열이 "baconlettucetomato"라면 나눠진 문자열 목록은 ["onlettu", "etom", "to"] 가 됩니다.

문자열 myStr이 주어졌을 때 위 예시와 같이 "a", "b", "c"를 사용해 나눠진 문자열을 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.

단, 두 구분자 사이에 다른 문자가 없을 경우에는 아무것도 저장하지 않으며, return할 배열이 빈 배열이라면 ["EMPTY"]를 return 합니다.

 

제한 사항

 

  • 1 ≤ myStr의 길이 ≤ 1,000,000
    • myStr은 알파벳 소문자로 이루어진 문자열 입니다.

 

풀이
function solution(myStr) {
  const answer = [...myStr]
    .map((item) => (item === "a" || item === "b" || item === "c" ? " " : item))
    .join("")
    .split(" ")
    .filter((item) => item !== "");

  return answer.length === 0 ? ["EMPTY"] : answer;
}

 

풀이 내용

 

1. map을 사용해서 a,b,c를 하나의 공통된 요소로 변경 해준다. 이전에 map을 사용하기 위해 myStr을 배열로 변경 해준다. 나는 아래의 코드와 같이 a,b,c를 공백으로 변경해 주었다.

// Expected output : [
  ' ', ' ', ' ', 'o', 'n',
  'l', 'e', 't', 't', 'u',
  ' ', 'e', 't', 'o', 'm',
  ' ', 't', 'o'
]

 

2. split() 메서드를 사용해서 문자열을 나눠줘야 하기 때문에 먼저 join()을 사용해 문자열로 변환 해준다.

// Expected output : "   onlettu etom to"

 

3. split() 메서드를 사용하여 공백이란 구분자로 문자열을 나눈다.

// Expected output : [ '', '', '', 'onlettu', 'etom', 'to' ]

 

4. 앞의 공백 요소 3개를 삭제하기 위해서 filter를 사용하여 공백이 아닌 문자열만 나오게 해준다.

// Expected output : [ 'onlettu', 'etom', 'to' ]

 

5. 만약 myStr가 전부 a,b,c로 이루어져 있어서 빈 배열(answer.length === 0)이 결과가 된다면 ["EMPTY"]를 리턴한다.