파이썬 알고리즘 문제풀이

프로그래머스 LV2 - 올바른 괄호

monsangter 2022. 11. 8. 00:38

 

문제 설명

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어

  • "()()" 또는 "(())()" 는 올바른 괄호입니다.
  • ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.

'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.

제한사항
  • 문자열 s의 길이 : 100,000 이하의 자연수
  • 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

먼저 스택큐문제라고 적혀있어서.. 어느정도 문제풀이에 대해 도움을 받았다.

첫번째가 (로 시작하고 마지막이 )로 끝나면서, (와 )의 개수가 같으면 다 되지 않을까? 라는 생각을 했으나,

반례가 나왔다.. 

스택큐 문제라는 것을 보면서 드는 생각이,

아 이거 열고 닫는 순서가 중요하구나.. (가 들어간 횟수만큼 )가 빠져야 왼성이 되고, (가 들어가지도 않았는데 )가 들어가면 틀리게된다.

pop과 append로 구현하려 했으나 없는 리스트공간에 pop을 시도하면 아에 실행이 안되므로, 숫자로 바꿔서 진행했다.

 

1. answer 의 default 값은 True 이다.

 

 

2. (라면 +1, )라면 -1 을 해준다.

 

3. for 문이 실행중에 cnt가 -1이 된다면  answer을 Fasle 로 바꾸고 break 해줬다.

 

4. 실행후에 cnt 가 0이 아니라면 실패로 생각해 answer 을 false 로 바꿔줬다.

 

 

 


 

예외처리와 리스트연산을 활용한 풀이.

 

내가 한 풀이는 아니지만 가져와봤다.