코딩테스트
[프로그래머스] 올바른 괄호
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 을 구현해서 풀면 시간 초과가 난다 ^^.. 링크드 리스트로 시도해봐야겠다.