병아리의 코딩 일기

[스택] 프로그래머스 Lv2. 올바른괄호 풀이 본문

카테고리 없음

[스택] 프로그래머스 Lv2. 올바른괄호 풀이

oilater 2023. 5. 14. 19:55

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

 

프로그래머스

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

programmers.co.kr

 

알고리즘 강의 중 '스택' 부분을 듣고 실습 예제로 풀어본 문제인데 알고보니 2단계!

1단계 연습문제들을 다 풀고, 강의를 듣고 있는데 2단계도 해볼만 하겠다는 생각이 드네요! (착각일수도...ㅋㅅㅋ)

얼른 자료구조 / 알고리즘 배우고 2단계로 넘어가보려구요.

 

나의 풀이

function solution(s) {
  let answer = [s[0]];

  for (let i = 1; i < s.length; i++) {
    if (s[i] === ")") {
      answer.pop();
    } else {
      answer.push(s[i]);
    }
  }

  return answer.length === 0 ? true : false;
}

그동안 pop, push 함수를 쓰긴 했지만 오늘 배운 스택을 이용해 문제를 풀고자 했다.

먼저 answer 에 문자열 s의 첫번째 인덱스 값을 담아준다.

 

그리고 for 문을 돌려 s[i] 값이 ")"가 되면 answer에 담긴 "(" 를 제거해준다.

s[i]의 값이 ")"가 아니라면 answer에 push 해준다.

 

최종적으로 answer의 길이가 0이면 true를, 0이 아니면 false를 return 해준다.

 

다른 사람의 풀이

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;
}

코드를 보자마자 우와 소리가 나왔다. 

비슷한 코드지만 더 간결하고 cum 을 0으로 두고 

"(" 또는 ")"인지에 따라 +1, -1 을 해준 생각이 기발했다.

 

728x90
반응형
LIST