[백준] 9012.괄호 (Swift)
https://www.acmicpc.net/problem/9012
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
풀이
스택을 이용해 해결할 수 있는 간단한 문제입니다.
괄호는 무조건 한 쌍으로 이루어져야 하며 괄호가 열리면 무조건 괄호는 닫혀야 합니다. 스택을 이용해 괄호의 유효성을 판단하는것은 굉장히 간단합니다.
(
가 나오면 스택에 push 하고 )
가 나오면 pop 하는 것이 전부입니다.
하지만 pop 할 시 스택이 비어있다면 해당 괄호 set 은 유효하지 않습니다. 혹은 모든 push 와 pop 이 끝나고 난 후에도 스택에 남아있는 원소가 존재한다면 해당 괄호 set 또한 유효하지 않다고 볼 수 있습니다.
문자열의 문자들을 하나씩 탐색하며 위 방법을 반복하면 문제를 해결할 수 있습니다.
코드
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
var n: Int = Int(readLine()!)! | |
var answer: String = "" | |
var stack: [String] = [] | |
var isVPS: Bool | |
for _ in 0 ..< n { | |
isVPS = true | |
stack.removeAll() | |
let bracket: String = readLine()! | |
for b in bracket { | |
if b == "(" { // ( 나오면 push | |
stack.append("(") | |
} else { // ) 나왔는데 | |
if stack.isEmpty { // 비었으면 false 저장 후 break | |
isVPS = false | |
break | |
} else { // 정상이면 pop | |
stack.removeLast() | |
} | |
} | |
} | |
if !stack.isEmpty { | |
answer += "NO\n" | |
} else if isVPS { | |
answer += "YES\n" | |
} else { | |
answer += "NO\n" | |
} | |
} | |
print(answer) |
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 14888.연산자 끼워넣기 (Swift) (0) | 2022.07.07 |
---|---|
[백준] 7453.합이 0인 네 정수 (Swift) (0) | 2022.06.19 |
[백준] 18808.스티커 붙이기 (Swift) (0) | 2022.06.17 |
[백준] 2461.대표 선수 (Swift) (0) | 2022.06.01 |
[백준] 2564.경비원 (Swift) (0) | 2022.05.31 |