일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- HumanInterfaceGuidelines
- 1935
- POSTECH
- HumanInterfaceGuideline
- SWiFT
- 코딩테스트
- 코드트리
- 백준
- 코딩트리조별과제
- Playground #Swift
- HIG
- Apple
- 애플디벨로퍼아카데미
- Algorithm
- Xcode
- AppleDeveloperAcademy
Archives
- Today
- Total
WonniOS
[Swift] 4. 백준 9012번: 괄호 본문
문제
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)
}
'Algorithm' 카테고리의 다른 글
[Swift] 6. 백준 1406번: 에디터 (0) | 2023.02.22 |
---|---|
[Swift] 5. 백준 1874번: 스택 수열 (0) | 2023.02.15 |
[Swift] 3. 백준 9093번: 단어 뒤집기 (0) | 2023.02.12 |
[Swift] 2. 백준 1546번: 평균 (0) | 2022.08.28 |
[Swift] 1. 백준 1110번: 더하기 사이클 (0) | 2022.08.26 |