본문 바로가기

PS/프로그래머스

[프로그래머스/Level.2/python] 올바른 괄호

문제 설명부터 해보겠습니다.
'(' 이후에 바로 ')'가 나오지않더라도 결국에 한쌍을 이루어 빠져나와야하는 구조입니다.
단순히 쌍을 이룬다고 문제가 해결되는것이 아니라 '(' 가 ')'보다 선행되어야 합니다.
입출력 예시는 다음과 같습니다.

스택과 큐 개념을 사용해 풀 수 있는 전형적인 문제인데
저는 그 개념을 이용하지않고 푼 풀이와 스택을 사용한 풀이 두개 다 설명해보겠습니다!
 
먼저 스택을 사용하지않고 푼 풀이 먼저 살펴보겠습니다.

'('의 개수와 ')'의 개수를 count로 더하고 빼서 비교하는 방식으로 접근하였습니다.
전체적으로 설명하자면 다음과 같습니다.
 
배열을 읽어서 '(' 라면 +1 을 ')'라면 -1 을 합니다.
for문을 도는 도중에 '(' 의 수보다 ')' 의 수가 더 많다면 (ex. ((()))) ) count의 개수가 무조건 0보다 작아지는 경우가 생길것이고 
 
'(' 와 ')' 의 개수의 짝은 맞지만 순서가 틀린 경우 (ex. )()( ) 와 같은 경우에는 최종 count 결과는 0으로 문제가 없어보이지만
for 문 안에서 0보다 작아지는 경우가 생길 것이므로 

if(count < 0):
	return False

로 잘못된 것을 찾아낼 수 있습니다. 
 
제대로 된 짝의 경우 (ex. (()) ) 최종 count 가 +1, +1, -1, -1 로 0이 되는 것을 확인 할 수 있습니다.
 
 
 
 
 
다음은 스택을 사용한 풀이를 살펴보겠습니다.

문자열 s의 각 문자 char 를 순회합니다.
stack 이 비어있으면 현재 문자 char 를 스택에 추가합니다.
stack 이 비어있지 않으면 top 을 꺼내고 현재문자 char 와 결합하여 문자열 () 과 같은지 확인합니다.
만약 ()과 같다면 빼고 같지 않다면 현재문자 char 를 스택에 다시 넣고 새로운 괄호 짝을 형성하기위해
현재 문자 char 를 스택에 추가합니다. 이렇게 문자열을 모두 처리한 후 stack에 남아있는 요소가 없으면 올바른 괄호 짝이고
함수는 True를 반환하고 stack에 요소가 남아있는 경우에는 False를 반환합니다.
 
 
https://school.programmers.co.kr/learn/courses/30/lessons/12909

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr