▶정규 표현식 & ▶filter 을 활용한 간단한 문제가 있어 정리해보고자 합니다.
문제설명
임의의 문자열이 주어졌을 때 문자 "a", "b", "c"를 구분자로 사용해 문자열을 나누고자 합니다.
예를 들어 주어진 문자열이 "baconlettucetomato"라면 나눠진 문자열 목록은 ["onlettu", "etom", "to"]가 됩니다.
문자열 myStr이 주어졌을 때 위 예시와 같이 "a", "b", "c"를 사용해 나눠진 문자열을 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
단, 두 구분자 사이에 다른 문자가 없을 경우에는 아무것도 저장하지 않으며, return할 배열이 빈 배열이라면 ["EMPTY"]를 return 합니다.
제한사항
- 1 ≤ myStr의 길이 ≤ 1,000,000
- myStr은 알파벳 소문자로 이루어진 문자열 입니다.
입출력 예 & 설명
입출력 예 #1
- 문제 설명의 예시와 같습니다.
입출력 예 #2
- "c" 이전에는 "a", "b", "c" 이외의 문자가 없습니다.
- "c" 이후에 문자열 "d"가 있으므로 "d"를 저장합니다.
- 따라서 ["d"]를 return 합니다.
입출력 예 #3
- "a", "b", "c" 이외의 문자가 존재하지 않습니다. 따라서 저장할 문자열이 없습니다.
- 따라서 ["EMPTY"]를 return 합니다.
나의 풀이
먼저 코드가 긴데 처음에는 문자 'a', 'b', 'c'를 다중으로 비교할 방법이 생각나지 않아서 if문을 사용해서 길어졌습니다.
일단 코드 설명을 하자면
5번째 줄에서 split()을 사용하여 myStr의 문자열을 하나씩 나눠주었습니다.
6번째 줄에서 기본 for문을 사용하는데 하나씩 나눠준 문자를 하나씩 'a', 'b', 'c'와 비교를 하여 만약 'a', 'b', 'c' 중 하나라도 같은 문자가 있다면 해당 인덱스에 '_'를 연결해 주어서 'a', 'b', 'c'가 아닌 문자열을 '_'로 나눠 주었습니다.
그러면 위와 같이 나눠지게 되는데 그리고 20번째 줄에서 split('_')를 사용하여 '_'를 기준으로 나눠 배열로 만들어줍니다.
그리고 나눠준 배열의 길이만큼 for문을 사용하여 만약 tmp배열에 넣어준 각 요소가 빈 값이 아니라면 answer 배열에 넣어줍니다.
[ 'onlettu', 'etom', 'to' ]
[ 'd' ]
[]
그러면 위와 같이 나오게 될 텐데 마지막으로 'a', 'b', 'c' 이외의 문자가 존재하지 않는다면 저장할 문자열이 없기 때문에 ["EMPTY"]를 반환하기 위하여 return문에서 삼항연산자를 활용하여 answer의 길이가 0이라면
["EMPTY"]를 반환해 주고, 아니라면 answer을 반환하여 마무리했습니다.
다른 풀이
다른 풀이에서는 "나의 풀이"에서 몰라서 못했던 다중 비교를 정규식을 활용하여 풀이했습니다.
/[abc]/ → [] = 괄호 안의 문자들 중 하나 & abc == "abc 문자들 중 하나"
[ '', '', '', 'onlettu', 'etom', 'to' ]
[ '', '', '', 'd' ]
[ '', '', '', '', '', '' ]
split과 정규식을 사용하면 위 배열과 같이 나오게 되는데 해당 요소가 true일 요소만 필터링할 수 있는 filter() 함수의 특성을 이용하기 위해서 filter() 함수를 사용하여 해당 el(element)가 true일 때만 answer에 넣어줍니다.
마지막으로 "나의 풀이" 랑 같은 맥락으로 return문에서 길이를 비교하여 값을 반환해 주어 마무리해주었습니다.
다른 풀이 2
split()과 join()을 활용하여 문자열을 여러 조건으로 나눌 수 있습니다.
split()을 활용하여 소괄호 내의 기호로 문자열을 나누고 배열로 만들어줍니다.
그리고 join()을 활용하여 소괄호 내의 기호로 배열의 각 원소를 이어 붙여 문자열로 만듭니다.
4번째 줄까지 하면 위코드와 같이 나오게 되는데 "나의 풀이"와 같은 맥락으로 문자열을 비교하여 해당하는 값을 반환해 주어 마무리했습니다.
'Coding Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 리스트 자르기 (JavaScript) (0) | 2024.02.12 |
---|---|
[프로그래머스] 문자열 묶기 (JavaScript) (1) | 2024.02.11 |
[프로그래머스] 배열의 길이를 2의 거듭제곱으로 만들기 (JavaScript) (0) | 2024.02.08 |
[프로그래머스] 문자열이 몇 번 등장하는지 세기 (JavaScript) (1) | 2024.02.07 |
[프로그래머스] 수열과 구간 쿼리3 (JavaScript) (0) | 2024.02.06 |