본문 바로가기

코딩테스트

[프로그래머스] level2. 올바른 괄호 (javascript)

반응형

문제

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

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

나의 풀이

의식의 흐름

  1. 굳이 일일이 확인할 필요는 없을것 같았다.-> true false 반환이니까
  2. "("하나 나오면 ")"도 나오는지 확인만 하면 될 것 같다.
  3. 예외가 있을까? -> "(" 없이 ")" 나오는지도 판단해야겠다.

구현 : split, map => return을 바로하기에는 조건이 좀 있어서 애매하다 판단,그냥 for문으로 하기로함
1. 전체를 바꾸고 이를 더한다.
2. 하나씩 문자열 검열하며 계산해준다.

 

코드

function solution(s){

    for(let i =0, cnt =0;i < s.length;i++){
        if (s[i] == "("){
            cnt +=1;
        } else if (s[i] == ")"){
            cnt -= 1;
        }
        if (cnt < 0 ){ 
            return false
        }
        if ( i == s.length -1 ){
            return cnt == 0 ? true : false
        }
    }
}

cnt가 0 이하로 가면 "("없이 ")"가 먼저 나왔다 판단했다.

 

추가

let result = string.match(/(\(|\))/g);

/  /g 안에 ( ) 안에 \( | \) 가 있다고 보면 된다.

match를 활용하면 

result = [ '(', ')' ,')' ,')']

와 같은 결과를 얻을 수 있다. 

반응형