스택 (Stack) _ 프로그래머스_올바른 괄호

mingyu Lim·2023년 3월 5일

코딩테스트

목록 보기
8/32
post-thumbnail

스택

스택은 "쌓아놓은 더미"라는 뜻으로 쌓여있던 접시, 쌓여 있는 상자가 스택에 해당이 되며 "프링글스"과자가 스택의 대표적인 예시이다. LIFO(Last-In First-Out)으로 가장 최근에 들어온 데이터가 가장 먼저 나간다는 의미이다. LIFO의 경우 핸드폰의 뒤로가기나 흔히 우리가 문서나 코딩 작업을 할 때 Ctrl+Z같이 데이터를 되돌릴 때 이 스택 자료구조를 이용한다.

JS 사용법

보통 배열을 통해 많이 구현하며, Array.push(),Array.pop()을 이용해서 삽입과 추출을 구현할 수가 있다.

let arr = []
for(let i = 1 ; i <= 3 ; i++){
  arr.push(i)
}

arr.pop() // 3; 
arr.push(4)

console.log(arr) // [1,2,4]

예제 (프로그래머스_올바른 괄호)

문제 링크

괄호가 바르게 짝지어졌는지 확인하여 boolean값으로 return 하시오.

  • 입출력
sanswer
"(())()"true
"(()("false
function solution(s){
    var answer = true;
    let left = 0
    // 1
    if(s[0] === ')') return false 
  
  	// 2
    for(let i = 0 ; i < s.length; i++){
        if(s [i] === '(') left+=1
        else left -= 1
        if(left < 0) return false
    }
    // 3
    if(left !== 0) return false

    return answer;
}
  1. 첫 입력값부터 ')'인 경우 맞지 않기 때문에 false값을 리턴한다.
  2. 반복문을 통해 '(' 인 경우 left값을 1씩 더해주고, ')'인 경우 1씩 빼준다. 만일 left의 값이 음수인 경우 짝이 맞지 않기 때문에 false를 리턴해준다.
  3. left의 값이 0이 아닌 경우에는 제대로 잘 닫히지 않는 괄호가 남았기 때문에 false가 된다.

0개의 댓글