자료구조 및 알고리즘/JavaScript Practice

[프로그래머스] 왼쪽 오른쪽

Ryomi 2024. 12. 11. 22:22
728x90
반응형

24년 12월 11일
해결한 문제 갯수: 11

 

문제 설명

 

문제 분석

- "l"이 "r"보다 먼저 나오면, "l" 이전의 모든 원소를 순서대로 담은 배열을 반환합니다.

- "r"이 "l"보다 먼저 나오면, "r" 이후의 모든 원소를 순서대로 담은 배열을 반환합니다.

- "l"과 "r"이 없다면 빈 배열을 반환합니다. 

 

 

 

 

첫 번째 접근: indexOf를 활용한 방법

function solution(str_list) {
    let answer
    const [lIdx, rIdx] = [str_list.indexOf("l"), str_list.indexOf('r')]
    
    if([lIdx, rIdx].includes(-1)) {
        if(lIdx === rIdx) return []
        else if(lIdx > rIdx) answer = str_list.slice(0, lIdx)
        else answer = str_list.slice(rIdx + 1)
    } else answer =  lIdx < rIdx ? str_list.slice(0, lIdx) : str_list.slice(rIdx + 1)
    
    return answer
}

 

  • 위치 찾기
    • indexOf는 문자를 찾지 못하면 -1을 반환합니다.
    • 배열 구조 분해를 사용하여 두 인덱스를 동시에 할당합니다.
  • 조건 처리
    • 먼저 둘 중 하나라도 없는 경우(-1)를 확인합니다.
    • 둘 다 있는 경우 인덱스를 비교하여 적절한 부분을 추출합니다.
  • 결과 도출
    • slice 메소드를 사용하여 필요한 부분 배열을 추출합니다.
    • 조건에 따라 시작 인덱스나 끝 인덱스를 적절히 조정합니다.

 

 

두 번째 접근: for 루프를 사용한 최적화

function solution(str_list) {
    for(let 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'를 찾는 즉시 처리를 종료하도록 수정

728x90
반응형