코딩테스트/SWEA

[Python, 파이썬] SWEA 1218. [S/W 문제해결 기본] 4일차 - 괄호 짝짓기

알코딩 2024. 11. 10. 13:43

4 종류의 괄호문자들 '()', '[]', '{}', '<>' 로 이루어진 문자열이 주어진다.

이 문자열에 사용된 괄호들의 짝이 모두 맞는지 판별하는 문제.

 

 

T = 10 # 테스트케이스 개수

for test_case in range(1, T+1):

    N = int(input()) # 괄호 문자들 길이
    bracket = list(input()) # 괄호 문자들

    dic = {'(':0, ')':0, '[':0, ']':0, '{':0, '}':0, '<':0, '>':0} # 괄호 dict
    pair = [('(', ')'), ('[', ']'), ('{', '}'), ('<', '>')] # 페어 기술
    ok = 1 # 유효성 여부

    for flag in bracket:
        dic[flag] += 1 # 괄호 개수 count

    for p, q in pair:

        if(dic[p] != dic[q]): # 같은 쌍인 괄호의 개수가 같지 않으면
            ok = 0 # 유효하지 않음

    print("#%d %d" %(test_case, ok))
 
 

 

[문제풀이]


 

D4라고 하기엔 엄청 쉬운 문제.

괄호의 짝을 찾으라 해서 '>' 다음에 '<'가 나오거나 같은 페어라 해도 반대되는 경우가 나오나 어디까지 고려해야 하나 걱정했는데 그냥 단순히 각 괄호의 개수를 count 해주면 된다.

dic = {'(':0, ')':0, '[':0, ']':0, '{':0, '}':0, '<':0, '>':0} # 괄호 dict
 

이렇게 딕셔너리를 만들어 대치되는 개수를 세준다.

{'(': 34, ')': 35, '[': 43, ']': 43, '{': 41, '}': 40, '<': 31, '>': 31}
 

그럼 이렇게 나오는데, 여기서 페어인 애들의 개수가 같은지 확인해 다르면 유효하지 않다 해주면 된다.