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

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

by dygreen 2025. 2. 2.

📌 문제

 

📌 풀이

처음 풀이 🚫

function solution(str_list) {
    var answer = [];
    str_list.forEach((item, idx) => {
        if (item === 'l') {
            answer = str_list.slice(0, idx);
            return
        }
        if (item === 'r') {
            answer = str_list.slice(idx + 1);
            return
        }
    })
    return answer;
}
  • forEach() 를 사용해 조건에 맞는 경우에 로직을 실행하고 return 을 통해 반복문을 멈추도록 의도했다.
  • 하지만 코드 실행 결과 해당 로직은 통과하지 못했다..
  • 통과하지 못한 원인을 파악하다, forEach()반복을 조기에 종료할 수 있는 기능이 없다는 것을 부끄럽게도 처음 알게 되었다..🙈💧

반성하는 마음으로 잊어버리지 않기 위해 정리한다..

 

 

+ 반복을 조기에 종료할 수 있는 것들

for (let i = 0; i < arr.length; i++) {
  if (조건) {
    break; // 조건 만족 시 반복 종료
  }
  // 작업 수행
}

for (const item of arr) {
  if (조건) {
    break; // 조건 만족 시 반복 종료
  }
  // 작업 수행
}
  • break 키워드를 사용해서 반복을 조기에 종료할 수 있다
  • 또한, 함수 내에서 사용하면 return 을 통해 반복문뿐 아니라 함수 전체를 종료할 수도 있다.

 

맞는 풀이 💯

function solution(str_list) {
    for (const [idx, item] of str_list.entries()) {
        if (item === 'l') {
            return str_list.slice(0, idx);
        }
        if (item === 'r') {
            return str_list.slice(idx + 1);
        }
    }
    return [];
}
  • for문 외에 다른 방식으로 풀고 싶어 for...of문을 사용해보기로 했다.
  • 이 문제에서는 인덱스 값을 가져와야 했는데, 배열의 인덱스 값은 .entries() 로 가져올 수 있었다.
  • .entries() 를 사용하여 [인덱스, 값] 쌍을 순회한다.
  • 조건을 만족하면 즉시 return 으로 함수가 종료된다.

 


 

.entries()Array 와 Object 둘 다 사용할 수 있는 메서드이다.

 

Array.prototype.entries()

(위 풀이에서 사용한 .entries 의 경우)

반환 값은 실제로 배열이 아니라 이터레이터(iterator)이다. 이 이터레이터는 순회할 때마다 [인덱스, 값] 형태의 배열을 반환한다.

 

예를 들어, ['a', 'b', 'c'] 라면, 이터레이터를 배열로 변환하면 다음과 같이 보인다.

Array.from(str_list.entries());
// 결과: [[0, "a"], [1, "b"], [2, "c"]]

 

 

Object.entries(obj)

Array.prototype.entries() 와 달리 Object.entries(obj) 는 최종적으로 배열을 반환한다.

객체의 모든 열거 가능한 속성 [키, 값] 쌍들을 배열로 반환한다.

 

 

 

728x90

댓글