[4889] 안정적인 문자열

RudinP·2023년 10월 3일
0

BaekJoon

목록 보기
75/77

생각

  • 입력 길이는 항상 짝수
  • {}는 안정적이지만 }{는 안정적이지 않다
  • 연산은 열린걸 닫힌걸로, 닫힌걸 열린걸로 변경하는것만 가능하다.
  1. 스택에 괄호를 넣는다.
  2. }를 넣으려 할 때 { 가 스택에 있다면 pop
  3. 해당 문자열이 끝났을 때 스택을 확인
  • {{만 남아있다면 하나만 바꾼다. -1
  • }}만 남아있다면 하나만 바꾼다. -1
  • }{가 남아있다면 두 번 바꾼다. -2
  • 횟수 체크 후 pop
  1. 스택이 비면 횟수를 리턴, 출력.

코드

import Foundation

func stableCheck(line: String) -> Int{
    var stack = [Character]()
    
    for item in line{
        if(stack.isEmpty){
            stack.append(item)
        }
        else if(item == "}"){
            if(stack.last == "{"){
                stack.removeLast()
            }else{
                stack.append(item)
            }
        }else{
            stack.append(item)
        }
    }
    
    if stack.isEmpty{
        return 0
    }else{
        var answer: Int = 0
        while(!stack.isEmpty){
            let a = stack.removeLast()
            let b = stack.removeLast()
            
            if(a == "{"){
                if(b == "}"){
                    answer += 2
                }
                else if(b == "{"){
                    answer += 1
                }
            }else{ //a == "}"
                answer += 1
            }
        }
        return answer
    }
}

func printResult(result: [Int]){
    for(index, item) in result.enumerated(){
        print("\(index + 1). \(item)")
    }
}

var result = [Int]()
while let line = readLine(){
    if(line.contains("-")){
        break
    }
    result.append(stableCheck(line: line))
}
printResult(result: result)

profile
곰을 좋아합니다. <a href = "https://github.com/RudinP">github</a>

0개의 댓글