[Swift]BOJ-9012

1. BOJ-9012, 괄호

1.1. 문제 📑

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

 

9012번: 괄호

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

www.acmicpc.net

1.1.1. 문제 정리 ▾

BOJ-9012

  • 문장의 개수입력받는다.
  • 문장들은 괄호로 구성되어있고, 괄호완전한 한쌍이 되는지 체크하여 한쌍으로 잘 닫힌다면 "YES", 제대로 닫히지 않으면 "NO"를출력한다.

 

1.2. 접근 🚶🏻

1.2.1. 나의 생각 ▾

  • 괄호 "("와 ")"를 각각 카운트하는데 "("일 경우 더해주고, ")"일 경우 빼주면 된다고 생각했다.
  • 결과 값이 "0"일 경우 "YES"를 출력시켜주고, 빼는 과정에서 열린 괄호가 없다면(count < 0)이면 break를 통해 루프를 끊어주면 된다고 생각했다.

1.2.2. 나의 해결 ▾

func solution() {
    let cnt = Int(readLine()!)!
    for _ in 0..<cnt {
        let str = readLine()!
        var checkCount = 0
        for char in str {
            if char == "(" {
                checkCount += 1
            } else {
                checkCount -= 1
                if checkCount < 0 {
                    break
                }
            }
        }
        print(checkCount == 0 ? "YES" : "NO")
    }
}
solution()swift
  • 코드에 관한 내용은 밑에서 살펴보자 😀

 

1.2.3. 코드 리뷰 ▾

for _ in 0..<cnt {
    let str = readLine()!
    var checkCount = 0
    for char in str {
        if char == "(" {
            checkCount += 1
        } else {
            checkCount -= 1
            if checkCount < 0 {
                break
            }
        }
    }
    print(checkCount == 0 ? "YES" : "NO")
}swift
  • str변수에 입력을 받고, for문을 통해 하나씩 if문을 거쳐 +,-를 진행했다.
  • 특히 신경을 썼던 부분이 else문 안에 있는 if문이었다.
  • 저 if문을 통해 불완전한 괄호 일 경우, 더 체크 없이 바로 루프를 끊어주었다.

 

1.3. Additional 📂

  • 처음에 forEach문으로 진행을 하였으나 break의 에러 문을 접했다. ▾
Unlabeled 'break' is only allowed inside a loop or switch, a labeled break is required to exit an if or do

레이블이 지정되지 않은 '중단'은 루프 또는 스위치 내부에서만 허용되며, if 또는 do를 종료하려면 레이블이 지정된 중단이 필요합니다.
  • 이를 통해 break문을 사용하기 위해 forEach를 for문으로 바꿔서 진행했는데, forEach는 제한을 거는 목적에서는 사용하면 안 되겠다는 생각을 했다.
  • 설 연휴에 알고리즘 공부.. 아주 유익한 시간이다 😆

'Algorithm.zip' 카테고리의 다른 글

[Swift]BOJ-10845  (0) 2022.02.02
[Swift]BOJ-1406  (0) 2022.02.01
[Swift]BOJ-9093  (0) 2022.01.31
[Swift]BOJ-10828  (0) 2022.01.30
[Swift]BOJ-10815  (0) 2022.01.29