코딩테스트

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

raccoon97 2023. 2. 17. 17:24

난이도 : Lv 2

분류 : 스택 / 큐

 

문제

 

 

프로그래머스

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

programmers.co.kr

 

코드

 

import Foundation

func solution(_ s:String) -> Bool
{
    var openCnt: Int = 0
    // 열려있는 괄호의 갯수
    
    for ch in s {
        if ch == "(" {
            openCnt += 1
            // 괄호가 열려있다면 openCnt 에 1을 더한다.
        } else {
            openCnt -= 1
            // 괄호가 닫혀있다면 openCnt 에 1을 뺀다.
        }
        guard openCnt >= 0 else {
            break
            // 괄호가 열리지도 않았는데 닫힌다면 반복문을 빠져나온다.
        }
    }
    return openCnt == 0 ? true : false
    // 남아있는 괄호가 없을 경우 true, 있을 경우 false 를 return 한다.
}

 

풀이

1. 괄호가 열렸다면 닫혀야 한다. ( ) --> O

2. 제일 첫 번째 괄호가 닫힌 채로 시작한다면 잘못된 상태이다. ) ( ) ( ) --> X

3. 괄호가 열리고( ++ ), 닫히는 경우( -- ) 열리지 않았는데 닫혔다면 잘못된 상태이다. ( ) ) --> X

4. 모든 괄호가 정상적으로 열리고 닫혔다면 최종적으로 openCnt 의 값은 0이다.

 

P.S

2단계 문제답지 않게 쉬운 문제였으며, 여러 방법으로 풀이가 가능하다.

왜인지 모르겠지만 Array 로 Stack 을 구현해서 풀면 시간 초과가 난다 ^^.. 링크드 리스트로 시도해봐야겠다.