[Py_Lv1] 대중소 괄호 짝 맞추기

문제 설명

여섯 가지 괄호 '(', ')', '{', '}', '[', ']'로 이루어진 문자열이 바르게 닫힌 문자열인지 알아보려 합니다. 바르게 닫힌 문자열이라는 것은

'(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로,
'[' 문자로 열렸으면 반드시 짝지어서 ']' 문자로,
'{' 문자로 열렸으면 반드시 짝지어서 '}' 문자로
닫히는 문자열입니다. 또한, 괄호 쌍 안에는 다른 괄호 쌍이 들어갈 수 있습니다. 예를 들어,

{{}}, ({})[]는 바르게 닫힌 괄호입니다.
), [, ([())]는 바르게 닫히지 않은 괄호입니다.
문자열 s가 주어졌을 때, 문자열 s가 바르게 닫힌 괄호이면 true를, 그렇지 않으면 false를 return 하는 solution 함수를 완성해 주세요.

제한 사항

  • 문자열 s는 (, ), {, }, [, ] 로만 이루어졌습니다.
  • 문자열 s의 길이는 1 이상 40 이하입니다.

입출력 예

접근법

dict 자료형과 stack 자료구조를 이용하여 풀 수 있는 문제다.

dict 자료형에는 여는 괄호를 key로 닫는 괄호를 value로 저장한다.

그리고 괄호가 들어있는 s를 for문을 이용해 하나씩 뽑아 여는 괄호인지
닫는 괄호인지 비교하여 여는 괄호의 경우 answer에 삽입한다.

닫는 괄호가 쌍으로 인식되려면 여는 괄호 뒤에 바로 닫는 괄호가 나와야
하기떄문에 stack 자료구조를 이용할 수 있다.

방금 넣었던 괄호의 닫는 괄호가 나온 경우 answer.pop()을 이용해
마지막 값을 삭제 후 변수에 담고 그 값을 비교한다.

참고로, dict의 경우 key에 맞는 value값을 찾아준다.

마지막으로 함정아닌 함정이 존재한다.

모든 조건을 만족하여 for문을 빠져나왔다고 해서
return 값을 True로 주면 테스트를 통과할 수 없다.

이유는 '{}[()](' 이런 경우에 발생한다.
여는 괄호는 answer에 삽입된다.

마지막에 있다면 삽입 후 for문은 정상적으로 종료된다.

하지만 주어진 문제로 봤을떄 False다 하지만 return을 True로 주었다면
오류가 발생한다.

그래서 answer의 길이를 체크하여 0일 경우 자동으로 True가 나오도록
코딩해야한다.

이유는 닫는 괄호를 만나면 answer.pop()을 통해 비교하기 떄문에
짝이 다 맞는 경우 answer안에는 아무것도 없어야 하기 떄문이다.

마지막 return 때문에 시간이 오래걸렸다. 늦은 시간이라 바로 자야겠다.😂😪

===========================================================

def solution(s):
    m = {'(' : ')', '{':'}', '[':']'}
    answer = []
    
    for i in s:
        if i in '({[':
            answer.append(i) 
        elif len(answer) == 0:
            return False
        else:
            x = answer.pop()
            if i != m[x]:
                return False
    return len(answer) == 0

좋은 웹페이지 즐겨찾기