문제 1. 괄호 짝 검사
괄호의 짝이 바르면 True, 바르지 않으면 False를 반환하는 함수를 작성하라.
예를 들어 ((a*(b+c))-d) / e
는 괄호의 짝이 올바르지만, (((a*(b+c))-d) / e
는 괄호의 짝이 맞지 않는다.
괄호는 소괄호(())만 사용한다.
풀이
1 | def solution(str): |
- 여는 괄호가 나오면 stack에
Push
- 닫는 괄호가 나오면 stack을
pop
- 이 때, stack에서 아무것도
pop
되지 않는다면, 제대로 된 괄호가 구성되지 않은 것이다.
- 이 때, stack에서 아무것도
문제 2. 소,중,대괄호 짝 검사
소괄호, 중괄호, 대괄호 짝이 맞는지 검사
1 | "[{a * (b + c)} - d] / e" # True |
풀이
1 | def solution(str): |
- brackets을 관리하는 딕셔너리를 만든다.
- 여는 괄호면 stack에 push한다.
- 닫는 괄호면, 해당 닫는 괄호와 짝을 이루는 여는 괄호가 stack.pop()한 요소와 같은지 비교
- 만약 다르거나 pop한 요소가 None이라면 False
문제 3. 짝지어 제거하기
같은 알파벳 2개가 붙어 있는 짝을 찾습니다.
그 다음 그 둘을 제거한 뒤 앞뒤로 문자열을 이어 붙입니다.
이 과정을 반복하여 문자열이 모두 제거된다면 1을 반환하고 그렇지 않으면 0을 반환합니다.
풀이
1 | def solution(str): |
- stack 클래스 대신 배열을 사용했다.
- stack의
push()
:append()
- stack의
pop()
:pop()
- stack의
peek()
: [-1]로 인덱싱 is_empty()
: 빈 리스트 논리값은 False 임을 이용