[프로그래머스] 올바른 괄호

재오·2023년 4월 9일
2

코딩테스트

목록 보기
18/46
post-thumbnail

🗒️ 문제

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어

"()()" 또는 "(())()" 는 올바른 괄호입니다.
")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.

⚠ 제한사항

  • 문자열 s의 길이 : 100,000 이하의 자연수
  • 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

📝 문제 해설

스택을 이용하여 문제를 풀어야 한다. 우선 괄호 한쌍이 완성되면 그것은 참이 되는 값이다. 괄호의 시작은 '('이기 때문에 '('가 먼저 배열에서 나타나면 스택에 담아준다. 이후 배열에서 ')'이 나오게 되면 한 쌍의 괄호가 완성되기 때문에 스택에서 '('을 제거해준다. 그런식으로 해서 스택에 남아있는것이 1개 이상이 된다면 그것은 False 값을 가지게 된다.

💡 필요 문법

Push()

배열의 가장 끝에 안에 들어있는 인자를 추가한다.

pop()

배열의 가장 끝 원소를 제거한다.

!(논리 연산자)

boolean type의 값을 반환한다. 보통 유효한 값이 들어가면 true이고 0이 들어가면 false이기 때문에 여기서 부정인 !을 사용해서 유효한 값이 들어있으면 false가 반환된다.

💻 코드

function solution(s){
    let stack = []; // 스택 생성
    for(let i=0; i<s.length; i++){
        if(stack[stack.length -1] === '(' && s[i] === ')'){
            stack.pop(); // 스택에 앞괄호가 있고 배열 s에 뒷괄호가 있다면 앞괄호가 들어있는 스택 원소를 제거한다.
        }
        else stack.push(s[i]); // 그 외의 경우 스택에 넣어준다
    }
    return !(stack.length); // 배열 원소의 개수가 1개 이상이 되면 fasle를 반환한다.
}
profile
블로그 이전했습니다

1개의 댓글

comment-user-thumbnail
2023년 4월 10일

팝팝팝~

답글 달기