반응형
문제
https://www.acmicpc.net/problem/4949




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
while(1):
 
    vps=input()
    if vps == '.':
        break
 
    count_small_bracket = 0
    count_big_bracket = 0
    for i in vps:
 
        if i=='(':
            count_small_bracket+=1
        elif i=='[':
            count_big_bracket+=1
        elif i==')':
            count_small_bracket-=1
        elif i==']':
            count_big_bracket-=1
        if count_small_bracket<0 or count_big_bracket<0:
            print("no")
            break;
 
 
    if count_small_bracket==0 and count_big_bracket==0:
        print("yes")
    elif count_small_bracket>0 or count_big_bracket>0:
        print("no")

cs


처음에는 각 줄에 대해 ( 와 [ 의 개수가 ) 와 ] 의 개수가 맞고 ] , ) 가 만저 나오지만 

않으면 yes가 출력 되게 구현하였다.

틀렸습니다! 라는 결과를 받았다.

반례를 생각해보니 

  • 짝을 이루는 두 괄호가 있을 때, 그 사이에 있는 문자열도 균형이 잡혀야 한다.
라는 구문에서 ( [ ) ]와 같은 구문이 걸린다.

조금 많이 달라져야 할거같다. 단순히 비교가 아닌  이번엔 스택을 이용해 구현해야겠다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
while(1):
 
    vps=input()
    if vps == '.':
        break
 
    stack_check_list=[]
    check = 1
    for i in vps:
        if i=='(':
             stack_check_list.append(0)
        elif i=='[':
            stack_check_list.append(1)
        elif i==')':
 
            if len(stack_check_list)==0:
                check = 0
                break
            if stack_check_list.pop()!=0#엇갈렸을때
                check = 0
                break
        elif i==']':
            if len(stack_check_list)==0:
                check = 0
                break
            if stack_check_list.pop()!=1#엇갈렸을때
                check = 0
                break
    if len(stack_check_list)==0 and check:
        print("yes")
    else:
        print("no")
cs


(일때와 [일때를 구분하여 스택에 넣어주고 ),]가 나왓을때 pop을 하는 stackcheckList를 
구현했고 엇갈리거나(pop 했을때 값과 비교),  닫는 괄호의수가 많아질때  check를 0으로
 만들어 주는 조건문을 만들어 주었다.밑에는 check가 바뀌지 않고 스택이 비어있다면 
yes를 출력하고 그외에 모든 경우 no를 출력하게 하였다.
이렇게 구현해주면 성공!



 





반응형

'알고리즘(python) > 자료구조' 카테고리의 다른 글

[Python]Queue 백준 18258  (0) 2020.01.15
[Python]Stack 백준 1874  (0) 2019.12.15
[Python]Stack 백준 9012  (0) 2019.12.14
[Python]Stack 백준 10773  (0) 2019.12.14
[Python]Stack 백준 10828  (0) 2019.12.14
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기