문자열 리스트 str_list에는 "u", "d", "l", "r" 네 개의 문자열이 여러 개 저장되어 있습니다. str_list에서 "l"과 "r" 중 먼저 나오는 문자열이 "l"이라면 해당 문자열을 기준으로 왼쪽에 있는 문자열들을 순서대로 담은 리스트를, 먼저 나오는 문자열이 "r"이라면 해당 문자열을 기준으로 오른쪽에 있는 문자열들을 순서대로 담은 리스트를 return하도록 solution 함수를 완성해주세요. "l"이나 "r"이 없다면 빈 리스트를 return합니다.
제한사항
function solution(str_list) {
let left = str_list.findIndex((v) => v === 'l');
let right = str_list.findIndex((v) => v === 'r');
if (left == -1 && right == -1) return [];
// && 조건 안 줘서 틀림
else if (left !== -1 && (left < right || right === -1)) return str_list.slice(0, left);
// +1을 안 해서 틀림
else return str_list.slice(right +1);
}
이것도 상당히 복잡하게 풀었는데 다른 사람 풀이 보니까 약간 허탈해짐 ㅎㅎ
이번 문제를 풀 때는 조건문을 잘 쓰는 것이 중요했다. 머리를 잘 써서 조건을 나눠야 하는데 약간 힘들었슴…
function solution(arr) {
for(let i = 0; i < arr.length; i++) {
if (arr[i] === 'l') return arr.slice(0, i);
if (arr[i] === 'r') return arr.slice(i + 1);
}
return [];
}
이렇게 훨씬 간단하게 줄일 수 있다니!
function solution(str_list) {
const i = str_list.findIndex((str) => /l|r/.test(str));
if (i === -1) {
return [];
}
return str_list[i] === 'l' ? str_list.slice(0, i) : str_list.slice(i + 1);
}
풀이는 다른 것과 같지만, 신기한 메서드가 있어서 가져와봤다!
RegExp.prototype.test()
test()
메서드는 주어진 문자열이 정규 표현식을 만족하는지 판별하고, 그 여부를true
또는false
로 반환합니다.
정규표현식 메서드를 사용해서 인덱스 번호를 구했다.
function solution(str_list) {
const idx = str_list.findIndex(c => c === 'l' || c === 'r')
return idx === -1
? []
: str_list[idx] === 'l'
? str_list.slice(0, idx)
: str_list.slice(idx+1)
}
간단해 보이는 것을 너무 어렵게 끙끙 앓다가 풀어낸 거라 같이 스터디하는 친구의 풀이가 궁금해서 살짝 훔쳐와봤다.
와 역시…
와 이런 풀이도 배워야함… 머싯다 울 언니…