https://school.programmers.co.kr/learn/courses/30/lessons/76502
다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.
대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.
type braceStack []string
var bs braceStack
func (bs *braceStack) pop() string {
if len(*bs) == 0 {
return ""
}
var result = (*bs)[len(*bs)-1]
*bs = (*bs)[:len(*bs)-1]
return result
}
func (bs *braceStack) push(s string) {
*bs = append(*bs, s)
}
func solution(s string) int {
var result int
var origin = s
for {
if isValidBraces(s) && len(bs) == 0 {
result++
}
s = moveTokenLeft(s)
if s == origin {
break
}
}
return result
}
func moveTokenLeft(s string) string {
return s[1:] + s[0:1]
}
func isValidBraces(bs string) bool {
for _, s := range bs {
if isBraceLocked(string(s)) {
continue
}
return false
}
return true
}
func isBraceLocked(b string) bool {
switch b {
case "(", "{", "[":
bs.push(b)
case ")":
p := bs.pop()
if p != "(" {
return false
}
case "}":
p := bs.pop()
if p != "{" {
return false
}
case "]":
p := bs.pop()
if p != "[" {
return false
}
}
return true
}
[Programmers] Lv.2 k진수에서 소수 개수 구하기 (Go) (0) | 2022.12.02 |
---|---|
Regular Expression - 하위 표현식 (0) | 2022.12.02 |
[Programmers] Lv.1 명예의 전당 (1) (Go) (0) | 2022.11.30 |
[Programmers] Lv.2 위장 (Go) (0) | 2022.11.29 |
[Programmers] Lv.2 행렬의 곱셈 (Go) (0) | 2022.11.28 |
댓글 영역