Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 코딩테스트
- 노드제이에스
- node
- 앵귤러
- angular
- Reduce
- codingtest
- 타입스크립트
- Nextjs
- slice
- 에러
- 코딩테스트연습
- 노드js
- 프로그래머스
- 마음커넥션
- 노드
- CLI
- 자바스크립트
- npm
- react
- indexOf
- 백엔드
- nodejs
- Array
- Javascript
- 개발
- Programmers
- TypeScript
- Method
- error
Archives
- Today
- Total
Suzie's Blog
[프로그래머스] 세 개의 구분자 (JavaScript) 본문
반응형
SMALL
문제 설명
임의의 문자열이 주어졌을 때 문자 "a", "b", "c"를 구분자로 사용해 문자열을 나누고자 합니다.예를 들어 주어진 문자열이 "baconlettucetomato"라면 나눠진 문자열 목록은 ["onlettu", "etom", "to"] 가 됩니다.문자열 myStr이 주어졌을 때 위 예시와 같이 "a", "b", "c"를 사용해 나눠진 문자열을 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.단, 두 구분자 사이에 다른 문자가 없을 경우에는 아무것도 저장하지 않으며, return할 배열이 빈 배열이라면 ["EMPTY"]를 return 합니다.
제한사항
• 1 ≤ myStr의 길이 ≤ 1,000,000
° myStr은 알파벳 소문자로 이루어진 문자열 입니다.
입출력 예
입출력 예
myStr result "baconlettucetomato" ["onlettu", "etom", "to"] "abcd" ["d"] "cabab" ["EMPTY"]
설명입출력 예 #1
문제 설명의 예시와 같습니다.
입출력 예 #2
"c" 이전에는 "a", "b", "c" 이외의 문자가 없습니다."c" 이후에 문자열 "d"가 있으므로 "d"를 저장합니다.따라서 ["d"]를 return 합니다.입출력 예 #3"a", "b", "c" 이외의 문자가 존재하지 않습니다. 따라서 저장할 문자열이 없습니다.따라서 ["EMPTY"]를 return 합니다.
내가 푼 방법
function solution(myStr) {
const result = myStr.split('a').map(item => item.split('b').map(item => item.split('c'))).filter(item => item.join('')).flat(2).filter(item => item.length>0)
return result.length === 0 ? ['EMPTY'] : result;
}
이걸 풀면서도 뭔가 좋은 방법이 아니라는 생각만 들었다.
그래도 내가 푼 방식을 설명하자면
1. myStr를 'a'를 기준으로 split ([ 'b', 'conlettucetom', 'to' ]
2. map으로 각 원소를 'b'를 기준으로 split ([ [ '', '' ], [ 'conlettucetom' ], [ 'to' ] ])
3. map으로 각 원소를 'c'를 기준으로 split
([
[ [ '' ], [ '' ] ],
[ [ '', 'onlettu', 'etom' ] ],
[ [ 'to' ] ]
])
4. flat(2)로 배열 2단계 제거 ([ '', '', '', 'onlettu', 'etom', 'to' ])
5. filter로 값이 없는것만 배열에 남기기([ 'onlettu', 'etom', 'to' ])
6. 배열의 길이로 ['EMPTY'] 로 반환 여부 결정
뭔가 그리 만족스럽지는 않지만 풀긴 풀었다.
감명받은 다른사람의 풀이
function solution(myStr) {
const tmp1 = myStr.split("a").join("b")
const tmp2 = tmp1.split("b").join("c")
const tmp3 = tmp2.split("c").filter(x => x)
if (tmp3.length === 0) return ["EMPTY"]
return tmp3
}
이거보자마자 "와우!"를 외쳤다.
결국 'abc'를 'ccc' 로 만들어서 split해주는 느낌! 역시 세상엔 똑똑한 사람이 많군
너무 깔끔하고 코드읽기도 너무 쉬워서 바로 블로그에 올려야겠다고 생각했다 ㅋㅋ
반응형
LIST
'개발 > 코딩테스트' 카테고리의 다른 글
[프로그래머스] 조건에 맞게 수열 변환하기 2 (JavaScript) (0) | 2024.04.01 |
---|---|
[프로그래머스] 간단한 논리 연산 (JavaScript) (0) | 2023.11.28 |
[프로그래머스]특정 문자열로 끝나는 가장 긴 부분 문자열 찾기(JavaScript) (feat. lastIndexOf) (0) | 2023.11.21 |
[프로그래머스] 문자열이 몇 번 등장하는지 세기(JavaScript) (0) | 2023.11.17 |
[프로그래머스] 문자열 뒤집기(JavaScript) (0) | 2023.11.09 |