본문 바로가기
배움 기록/코테 연습

[프로그래머스] 2의 영역 : JavaScript

by dygreen 2025. 1. 30.

📌 문제

 

📌 풀이

처음 풀이 🚫

function solution(arr) {
    const indexArr = [];
    let result;
    arr.forEach((num, idx) => {
        if (num === 2) indexArr.push(idx);
    })
    if (indexArr.length === 0) {
        result = [-1];
    }
    if (indexArr.length === 1) {
        result = [arr[indexArr[0]]];
    }
    if (indexArr.length > 1) {
        result = arr.slice(indexArr[0], indexArr[indexArr.length - 1] + 1);
    }
    return result
}
  • 반복문을 돌면서 짝수인 경우의 index 값을 indexArr 에 넣는다
  • indexArr 의 length 에 따른 조건문으로 배열을 slice 하여 결과를 return 한다

이 풀이는 통과를 했지만 forEach 반복문으로 인해 불필요한 연산이 발생할 수 있고, 간결함과 가독성이 떨어진다.

 

 

더 나은 풀이 💯

function solution(arr) {
    // 첫 번째 2의 index 찾기
    const first = arr.indexOf(2);
    // 2가 없는 경우
    if (first === -1) return [-1];
    
    // 마지막 2의 index 찾기
    const last = arr.lastIndexOf(2);
    
    // 첫 번째 2부터 마지막 2까지 slice 하여 return
    return arr.slice(first, last + 1);
}
  • indexOf() : 배열에서 주어진 요소를 찾을 수 있는 첫 번째 index 를 반환하고, 찾을 수 없는 경우 -1 을 반환한다
  • lastIndexOf() : 역순으로 탐색하여, 최초로 마주치는 index 를 반환하고, 찾을 수 없으면 -1 을 반환한다

 

 

728x90

댓글