BRACKETS2를 루비로 풀고있는데, 오답처리 되는 이유를 모르겠습니다, 조언 부탁드려요-해결

  • dwno108
    dwno108

    BRACKETS2 를 루비로 풀어보고 있는데, 어느 부분에서 오답처리가 되는지 도무지 모르겠네요 ㅠㅠ 조언 부탁드립니다

    코드와 알고리즘은 아래 있습니다

    #입력받기
    n = gets.chomp.to_i
    newarr = Array.new
    1.upto(n) do
        newarr << gets.chomp.to_s
    end
    #고정값 선언
    opener = ['(', '[', '{']
    set = {'(' => ')','['=> ']', '{'=>'}'}
    
    #검사
    newarr.each do |array|
        #내부 변수 초기화
        condition1 = true   
        stack = Array.new
        demo = Array.new
        demo = array.split(//)
    
        #검사
        demo.each do |ss|
            if opener.include? ss
                stack << ss                 #괄호가 여는 것이면 스택에 쌓는다
            elsif stack == []               #닫는 것인데 스택이 비어있으면 false
                condition1 = false  
            elsif set[stack[-1]] == ss      #닫는 것이 가장 마지막 스택의 여는 값과 매치되면 스택에서 괄호를 지운다
                stack = stack - [stack[-1]]
            else                            #위의 case에 해당하지 않으면 false
                condition1 = false
            end    
        end    
    
    
        unless stack == []                   #stack 에 남은 값이 없어야함
            condition1 = false
        end
    
    
        if condition1 == true               #컨디션 검사 및 출력 
            puts "YES"
        else
            puts "NO"
        end
    
    
    end
    

    8년 전
4개의 댓글이 있습니다.
  • fleo0917
    fleo0917

    {([]})


    8년 전 link
  • dwno108
    dwno108

    아 두개 이상 중첩이 있었군요 감사합니다!!


    8년 전 link
  • dwno108
    dwno108

    그것도 잡았다고 생각이 되는데도 오답이네요ㅠㅠㅠ


    8년 전 link
  • dwno108
    dwno108

    아 해결했습니다!!! stack에서 특정 배열을 빼면 차집합 연산을 하는것이었네요 ㅠㅠ!!!


    8년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.