Lv.0 : 왼쪽 오른쪽 [JavaScript]

2024. 7. 25. 20:55Algorithm/프로그래머스

반응형

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

 

프로그래머스

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

programmers.co.kr


문제 풀이

function solution(str_list) {
    var idxL = str_list.indexOf('l');
    var idxR = str_list.indexOf('r');
   
    if(idxL == -1 && idxR == -1) return [];
    else if(idxR == -1) return str_list.slice(0, idxL);
    else if(idxL == -1) return str_list.slice(idxR + 1);
    return idxL < idxR ? str_list.slice(0, idxL) : str_list.slice(idxR + 1);
}

l의 인덱스와 r의 인덱스를 구해 둘 다 없는 경우, 둘 중 하나만 없는 경우, 둘 다 있는 경우를 따져 리턴

 

너무 복잡하게 생각한 것 같다... 둘의 인덱스를 따로 구할 필요가 없는데,,,

 

더 간단하게

function solution(str_list) {
    var idx = str_list.findIndex((e) => e === 'l' || e === 'r');
   
    if(idx == -1) return [];
    else if(str_list[idx] == 'l') return str_list.slice(0, idx);
    else return str_list.slice(idx + 1);
}

l과 r을 합쳐서 찾는다

위에서는 특정 항목(l 또는 r)으로 찾았기 때문에 indexOf를 사용했지만 이번엔 조건을 주기 위해 findIndex를 사용했다

이 idx는 l과 r중 먼저 나온 것의 인덱스이므로 조건에 따져 리턴

 

더 더 간단하게

function solution(str_list) {
    for(var i=0; i<str_list.length; i++){
        if(str_list[i] == 'l') return str_list.slice(0, i);
        if(str_list[i] == 'r') return str_list.slice(i + 1);
    }
    return [];
}

그냥 배열을 돌면서 조건을 준다

l 또는 r 발견시 바로 리턴

배열 다 돌때까지 둘 다 없다면 빈 배열 리턴

 

쉬운 문제인데 한참을 삽질..ㅠ

 

 

반응형