❓ 오늘의 문제
1. 올바른 괄호
- 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()"는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
- '(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
나의 정답 코드
import Foundation
func solution(_ s:String) -> Bool
{
guard s.count <= 100_000 else { return false}
var ans:Bool = false
var stack: Int = 0
if s.prefix(1) == ")" { // 시작이 닫힌 괄호면 false 출력
return false
} else { // 열린 괄호로 시작하면 for문 수행
for i in s {
if i == "(" {
stack += 1
} else if i == ")" {
stack -= 1
}
if stack < 0 {
return false
}
}
}
if stack == 0 { // 스택 카운트가 0이면 올바른 괄호
ans = true
} else { // 스택 카운트가 0이 아니면 올바르지 않은 괄호
ans = false
}
return ans
}
✓ TIL
오늘은 올바른 괄호라는 문제를 풀어보았다.
괄호로만 이루어진 문자열 s가 주어졌을 때 올바른 괄호이면 true, 올바르지 않은 괄호이면 false를 return 하면 된다.
먼저 올바른 괄호란 '(' 와 ')'의 개수가 같고, ')'로 시작하지 않아야 한다.
나는 스택 자료구조를 이용해서 문제를 풀었다.
var stack: Int = 0
괄호의 수를 저장할 Int형 stack 변수를 하나 만들었다.
if s.prefix(1) == ")" { // 시작이 닫힌 괄호면 false 출력
return false
} else { // 열린 괄호로 시작하면 for문 수행
그리고 만약 주어진 문자열 s의 첫번째 문자가 닫힌 괄호로 시작한다면 false를 return하고
아니면 else문을 수행하도록 처리하였다.
for i in s {
if i == "(" {
stack += 1
} else if i == ")" {
stack -= 1
}
if stack < 0 {
return false
}
}
else문 안에서는 문자열 s를 가지고 for문을 수행한다.
현재 문자 i가 '(' 열린 괄호라면, stack변수에 1을 추가하고,
현재 문자 i가 ')' 닫힌 괄호라면, stack변수에 1을 빼준다.
그리고 아래 if문에서 stack이 0보다 작으면 false를 return 하고 있는데
이것은 열리지 않은 괄호가 먼저 닫히면 올바르지 않은 괄호이기 때문에 작성한 if문이다.
if stack == 0 { // 스택 카운트가 0이면 올바른 괄호
ans = true
} else { // 스택 카운트가 0이 아니면 올바르지 않은 괄호
ans = false
}
마지막으로 현재까지 스택에 저장된 값이 0이면 올바른 괄호
0이 아니면 올바르지 않은 괄호로 판단하여
ans의 값을 true 또는 false로 입력해 준다.
return ans
ans의 값을 return
😼 GitHub
'스파르타 코딩 클럽 - iOS 스타터 6기 > 알고리즘 코드카타' 카테고리의 다른 글
24. 스파르타 코딩 클럽 - 4월 24일 코딩테스트 연습 (코드카타) (0) | 2025.04.24 |
---|---|
23. 스파르타 코딩 클럽 - 4월 23일 코딩테스트 연습 (코드카타) (0) | 2025.04.23 |
21. 스파르타 코딩 클럽 - 4월 14일 코딩테스트 연습 (코드카타) (0) | 2025.04.14 |
20. 스파르타 코딩 클럽 - 4월 7일 코딩테스트 연습 (코드카타) (0) | 2025.04.07 |
19. 스파르타 코딩 클럽 - 4월 4일 코딩테스트 연습 (코드카타) (0) | 2025.04.04 |