https://programmers.co.kr/learn/courses/30/lessons/76502

 

코딩테스트 연습 - 괄호 회전하기

 

programmers.co.kr

 

괄호 회전하기는 stack/queue 로 분류될 수 있는 전형적인 문제이다.

논리는 정말정말 간단하다.

문자열 하나씩을 돌면서 하나하나를 맨 뒤로 옮긴다.

그렇게 되면 마지막 문자열까지 다 돌았을 때 돌기 전의 시작 상태가 된다.

그러면 모든 경우의 수에 대해 그것이 올바른 괄호 문자열인지 확인을 할 수 있다는 것이고,

그것을 확인하는 부분이 아래의 isBalanced 함수이다.

정답 코드는 다음과 같다.

 

import Foundation

func isBalanced(_ s: [Character]) -> Bool {
    var stack = [Character]()

    var dict = [Character:Character]()
    dict[")"] = "("
    dict["]"] = "["
    dict["}"] = "{"
    
    
    var s = s
    stack.append(s.first!)
    for i in 1..<s.count {
        if dict.values.contains(s[i]) { stack.append(s[i]) } // 여는 괄호는 무조건 Append
        else if stack.count != 0 && stack.last! == dict[s[i]] { stack.removeLast() }
        else { stack.append(s[i]) }
    }
    
    return stack.count == 0 ? true : false
    
    
}

func solution(_ s:String) -> Int {
    
    var s = s.map({ $0 })
    var answer = 0
    for i in 0..<s.count {
        var first = s.removeFirst()
        s.append(first)
        if isBalanced(s) { answer += 1 }
    }
    return answer
}

 

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
// custom