프로그래머스 연습문제 - 올바른 괄호(Level2, JS)

j_wisdom_h·2023년 1월 29일
0

CodingTest

목록 보기
28/58

프로그래머스 연습문제 - 올바른 괄호(Level2, JS)

문제설명


제한사항 & 입출력 예


Solution

function solution(s) {
  let left = 0;
  let answer = false;

  for (let [idx, el] of s.split("").entries()) {
    if (el === '(') {
      left++;
    } 
    else {
      left--;
      if (left < 0) {
        break;
      }
      if (left === 0 && idx === s.length - 1) {
        answer = true;
      }
    }
  }
  return answer;
}

다른사람 풀이

function solution(s){
    let cum = 0
    for (let paren of s) {
        cum += paren === '('? 1: -1
        if(cum < 0) {
            return false
        }
    }
    return cum === 0? true: false;
}

공부한것

처음에는 가장 익숙한 forEach문을 썼다.
그러나 문제점이 하나 있었다.

!중간에 멈추지 못한다는 것!

return후 forEach문을 빠져나오지 않고 마치 'continue'처럼 동작했다. 즉, forEach는 예외를 던지지 않고는 멈추지 못한다.

return false도 break;도 동작하지 않았다.

원소값과 인덱스를 모두 가질 수 있는 반복문이 무엇이 있을까 찾아보다가 발견한 Array.prototype.entries()

키와 값 모두에 접근할려면 아래와 같이 구조화 하여 사용할 수 있다 .

  for (let [index, value] of arr.entries()) { ... }

그외에도 some, every가 있었지만

  • every()는 배열의 모든 요소가 어떤 조건을 충족하는지 확인하고,
  • some() 함수는 배열의 1개 요소라도 특정 조건을 충족하는지 확인하는데 사용

한다는 점에서 내가 사용하고자 하는 의도(특정조건에서 브레이크, 충족 개수와 상관없음)와는 달라서 사용하지 않았다.

profile
뚜잇뚜잇 FE개발자

0개의 댓글