올바른 괄호

GoGoDev·2022년 4월 12일
0

Coding-Test Study

목록 보기
6/8

나만의 해석

  1. 괄호가 닫히면 true
  2. 마지막이 ( 면 false
  3. 처음이 ) 면 false
  4. (,)갯수가 다르면 false

나의 첫번째 풀이

function solution(s){
    let count = 0;
    for(let i = 0; i < s.length; i++){
        if(s[0] === ')'){
            return false;
        }
        if(s[i] === '('){
            count += 1;
        } else {
            count -= 1;
        }
        if(s[s.length - 1] === '('){
            return false;
        }
    } 
    return count === 0;
}

테스트 케이스 중 5번, 11번에서 계속 오류가 났다.

function solution(s){
    let count = 0;
    for(let i = 0; i < s.length; i++){
        if(s[0] === ')'){
            return false;
        }
        if(s[i] === '('){
            count += 1;
        } else {
            if (count === 0){
                return false;
            }
            count -= 1;
        }
    } 
    return count === 0;
}

효율성 테스트 2개 중 1개에서 시간 초과가 나왔다.

스택으로 풀어본 풀이

'('가 나오면 스택에 push, ')'가 나오면 스택에서 pop을 해준다.

    const stack = [];
    for(let i = 0; i < s.length; i++){
        if(s[i] === '('){
            stack.push(s[i])
        }
        if(s[i] === ')'){
            stack.pop()
        }
    }
    return stack.length === 0;

테스트 케이스 18중 1개에서 오류가 나왔다. 효율성은 통과하였다.
어떤 예외처리를 못하였는지 고민해보았다.

	if(s[i] === ')'){
            if(stack.length === 0){
                return false;
            }
            stack.pop()
        }

스택이 비어있을 때, pop을 할 수 없으므로
')'이 제일 먼저 시작할 때, false를 리턴해주어야한다.

마무리

스택에 저장된 값을 사용하는 것이 아니라 스택는 이번 문제에서는 어울리지 않는 문제인 것 같다.

profile
🐣차근차근 무럭무럭🐣

0개의 댓글