반응형
문제풀이:
열린 괄호일 때,
문제의 핵심은 1로 초기화된 temp 변수를 이용하여 "("가 입력되면 2를 곱하고 "["가 입력되면 3을 곱하는 것이다.
또한, 스택에 현재 괄호를 추가해준다.
닫힌 괄호일 때,
스택이 비어있거나 스택의 가장 윗 부분이 해당 닫힌 괄호에 짝이 아니라면 bool 값을 토글하고 반복문을 빠져나옵니다. -> 올바르지 않은 경우 확인
현재 괄호 직전의 괄호( "(" )가 해당 닫힌 괄호( ")" )의 짝일 경우에만 현재 temp의 값을 결과 값에 더해준다. 아래의 그림처럼 그려보면 이해가 된다.
temp를 해당 괄호에 따라 2를 나누거나 3을 나눠준다.
스택에 짝이 맞는 괄호를 꺼낸다.
이와 같이, 반복문이 다 돌고 bool값이 초기화한 값과 다르거나 스택이 비어있지 않다면 0을 출력한다.
그게 아니라면 결과 값을 출력한다.
코드:
var parens = Array(readLine()!).map { String($0) }
var stack = [String]()
var result = 0
var isCorrect = true
var temp = 1
for i in parens.indices {
if parens[i] == "(" {
temp *= 2
stack.append(parens[i])
} else if parens[i] == "[" {
temp *= 3
stack.append(parens[i])
} else if parens[i] == ")" {
if stack.isEmpty || stack.last != "(" {
isCorrect = false
break
}
if parens[i-1] == "(" {
result += temp
}
stack.removeLast()
temp /= 2
} else if parens[i] == "]" {
if stack.isEmpty || stack.last != "[" {
isCorrect = false
break
}
if parens[i-1] == "[" {
result += temp
}
stack.removeLast()
temp /= 3
}
}
if !isCorrect || !stack.isEmpty {
print(0)
} else {
print(result)
}
문제:
반응형
'Algorithm > BOJ' 카테고리의 다른 글
[Algorithm/BOJ] 1406 - 에디터 Swift Python (0) | 2021.05.11 |
---|---|
[Algorithm/BOJ] 1302 - 베스트셀러 Swift Python (0) | 2021.05.09 |
[Algorithm/BOJ] 5557 - 1학년 (DP) Swift (0) | 2021.04.29 |
[Algorithm/BOJ] 1806 - 부분합 (투 포인터) Swift (0) | 2021.04.19 |
[Algorithm/BOJ] 1074 - Z (분할정복, 재귀) Swift (0) | 2021.04.08 |
댓글