Algorithm

[Swift] 4. 백준 9012번: 괄호

Wonni 2023. 2. 12. 16:33
문제

https://www.acmicpc.net/problem/9012

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

 

풀이

처음엔 그냥 왼쪽과 오른쪽의 괄호 개수가 똑같으면 되는거 아냐? 라고 단순하게 생각하고 풀었으나,

())(() 의 경우로 인해 다시 생각을 해야했다. 

그래서 먼저 왼쪽, 오른쪽 괄호의 갯수를 세고,

오른쪽 괄호의 개수가 총 괄호 개수의 과반수 이상을 넘어가면 바로 No로 처리해주는 방식으로 구현했으나 이것도 다른 테스트케이스가 돌아가지 않았다.. ㅠ

 

그래서 왼쪽 괄호가 나오면 +1, 오른쪽 괄호가 나오면 -1을 해주고 결과값이 0이 되면 Yes로 처리해주는 방식으로 구현했다.

그리고 결과값이 0이지만, 괄호 순서가 맞지 않는 경우가 있어서 결과값이 0미만인 경우는 No 처리해주었다. 

 

 

전체코드
import Foundation

let number = Int(readLine()!)!


for _ in 0...number-1 {
  var vps = readLine()?.map{ String($0) }
  var count = 0
  var value = ""
  for i in 0...vps!.count-1 {
    vps![i] == "(" ? (count+=1) : (count-=1)
    if count<0 {
      value = "NO"
      break
    }
  }
  if count == 0 {value = "YES"} else {value = "NO"}
  print(value)
}