코딩테스트/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}
그럼 이렇게 나오는데, 여기서 페어인 애들의 개수가 같은지 확인해 다르면 유효하지 않다 해주면 된다.