저장을 습관화

프로그래머스 LV.0 세 개의 구분자 본문

코딩 테스트/프로그래머스 - 자바스크립트

프로그래머스 LV.0 세 개의 구분자

ctrs 2023. 9. 26. 18:04

프로그래머스 LV.0 세 개의 구분자

https://school.programmers.co.kr/learn/courses/30/lessons/181862

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제 명

세 개의 구분자


2. 문제 설명

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

 

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

 

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

 

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


3. 제한 사항

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


4. 예시

myStr result
"baconlettucetomato" ["onlettu", "etom", "to"]
"abcd" ["d"]
"cabab" ["EMPTY"]


5. 기본 제공 코드

function solution(myStr) {
    var answer = [];
    return answer;
}


6. 제출한 내 답

const solution = (myStr) => {
  let answer = myStr
    .replace(/[a-c]/g, " ")
    .split(" ")
    .filter((v) => v);
  return answer.join("") ? answer : ["EMPTY"];
};

 

6-2. VSC에 작성한 내용

const solution = (myStr) => {
  let answer = myStr
    .replace(/[a-c]/g, " ")
    .split(" ")
    .filter((v) => v);
  return answer.join("") ? answer : ["EMPTY"];
};

// 테스트
console.log(solution("baconlettucetomato"));
console.log(solution("abcd"));
console.log(solution("cabab"));


7. 특이사항

제대로 작동은 하는데 실행 시간이 너무 오래걸려서 찝찝하다

테스트 1 〉	통과 (75.24ms, 74.1MB)
테스트 2 〉	통과 (61.13ms, 68.7MB)
테스트 3 〉	통과 (9.13ms, 43MB)
테스트 4 〉	통과 (6.40ms, 41.7MB)
테스트 5 〉	통과 (22.90ms, 50.4MB)
테스트 6 〉	통과 (22.84ms, 55.5MB)
테스트 7 〉	통과 (25.06ms, 51.1MB)
테스트 8 〉	통과 (47.30ms, 66.2MB)
테스트 9 〉	통과 (31.10ms, 56.8MB)
테스트 10 〉	통과 (46.63ms, 72MB)
테스트 11 〉	통과 (32.00ms, 60.4MB)


8. 다른 사람이 작성한 답

8-1. 좋아요 가장 많이 받은 풀이법

//const solution=s=>s.match(/[^a-c]+/g)||['EMPTY']

 

8-2. 내 코드 개선

function solution(myStr) {
    const list = myStr.split(/[a|b|c]/).filter(str => str);
    return list.length ? list : ["EMPTY"];
}
function solution(myStr) {
    const arr = myStr.split(/[abc]/).filter(e => e);
    return arr.length == 0 ? ["EMPTY"] : arr;
}

replace 과정을 생략하고 바로 spilit 대상을 정규표현식으로 지정..