[프로그래머스 Python] Lv 2. 올바른 괄호
코딩테스트 고득점 Kit - 스택/큐 문제
✔️ 문제 설명
괄호가 바르게 짝지어졌다는 것은 ‘(‘ 문자로 열렸으면 반드시 짝지어서 ‘)’ 문자로 닫혀야 한다는 뜻입니다. 예를 들어
”()()” 또는 “(())()” 는 올바른 괄호입니다.
“)()(“ 또는 “(()(“ 는 올바르지 않은 괄호입니다.
‘(‘ 또는 ‘)’ 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 ‘(‘ 또는 ‘)’ 로만 이루어져 있습니다.
- 👉 문제 보러가기
입출력 예
s | answer |
---|---|
”()()” | true |
”(())()” | true |
”)()(“ | false |
”(()(“ | false |
입출력 예 설명
입출력 예 #1,2,3,4 문제의 예시와 같습니다.
✔️ 문제 풀이
(1) Pseudo-Code
- 괄호(입력값)을 for문으로 각각 하나씩 가져온다.
- 열린 괄호는 리스트에 넣는다. (닫힌 괄호가 들어온다면 하나씩 제거)
- 닫힌 괄호가 들어오면 리스트에 요소를 하나씩 제거한다. (이전에 열린 괄호가 들어와있는 경우)
- 닫힌 기호가 먼저 들어오는 경우는 바로 False를 반환하도록 설정한다.
- 최종으로 열린기호와 닫힌기호의 개수가 같으면 True가 반환되도록 설정한다.
(2) 코드 작성
def solution(s):
"""
괄호가 열렸으면 무조건 닫혀야함
((())) 이런식으로 같은 괄호가 여러 번 반복될 수 있음
열린 기호는 어느 경우에서도 올 수 있음 -> 끝에만 위치하지 않으면 됨
닫힌 기호는 열린기호 뒤에만 올 수 있음 또는 닫힌 기호 뒤 -> 끝에 위치해야 함
괄호 기호는 짝이 맞아야 함
"""
s_list = []
for b in s:
if b == '(':
s_list.append(b)
# (, ) 가 만났을 때 ( 기호를 하나 를 뺀다. => 짝이 맞아야하기 때문
elif b == ')' and len(s_list) >= 1:
s_list.pop()
else:
return False
return len(s_list) == 0
(3) 코드 결과
- 성능요약 : 메모리 10.4 MB, 시간 9.85 ms
- 채점결과 : 정확성 69.5, 효율성 30.5, 합계 100.0/100.0
(4) 코드 리뷰 및 회고
- 처음에 문제를 풀 때, 짝이 맞아야한다는 생각을 고려하지 못해
pop
함수를 사용하지 않았다.- 개수를 맞추기 위해
append
로 넣어준 것을pop
으로 제거하면 두 기호의 개수 동일 시 남아있는 요소는 없다는 점을 이용
- 개수를 맞추기 위해
- 이번 문제를 통해 스택에 대해 이해할 수 있었던 것 같다.
- 기억할 것 : 특정 요소들의 개수가 같아야 한다는 조건을 만족시킬 때, 스택 이용하기
댓글남기기