반응형
Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
An input string is valid if:
1. Open brackets must be closed by the same type of brackets.
2. Open brackets must be closed in the correct order.
Example 1:
Input: s = "()"
Output: true
Example 2:
Input: s = "()[]{}"
Output: true
Example 3:
Input: s = "(]"
Output: false
Example 4:
Input: s = "([)]"
Output: false
Example 5:
Input: s = "{[]}"
Output: true
Constraints:
1 <= s.length <= 104
s consists of parentheses only '()[]{}'.
class Solution:
def isValid(self, s: str) -> bool:
mapping = {')':'(', ']':'[', '}':'{'}
stack = []
for char in s:
if char not in mapping: # (, [, {
stack.append(char)
else:
if not stack: # 처음에 ), ], } 가 들어온 경우
return False
tmp = stack.pop()
if mapping[char] != tmp:
return False
if stack: # 스택이 남아있는 경우
return False
return True
본 문제는 프로그래머스인지, 어딘지 "괄호닫기"(?) 였나 하는 것으로 이미 풀어본 적이 있는 문제였다. 함정은 그럼에도 빠르게 풀지 못하고 계속 헤매었다는 것이다. 다양한 케이스가 있을텐데 그 경우를 생각하지 못하고 테스트 샘플만 보고 풀려다보니 그랬다.
생각치 못했던 케이스는 아래와 같다. 알고 나면 간단해보이지만 푸는 당시에는 생각나는 케이스가 없어서 틀리고 나서야 떠올렸다.
1. "("
2. "){}"
3. "(("
결론적으로 위의 3가지 경우를 생각해서 코드를 추가하니 통과할 수 있었다.
728x90
반응형
'문돌이 존버 > 프로그래밍 스터디' 카테고리의 다른 글
(프로그래머스 깊이/너비 우선 탐색 문제 풀이) 타겟 넘버 (0) | 2021.07.18 |
---|---|
(leetcode 문제 풀이) Merge Two Sorted Lists (0) | 2021.07.18 |
(프로그래머스 연습 문제 풀이) 짝지어 제거하기 (0) | 2021.07.16 |
(프로그래머스 연습 문제 풀이) [1차] 다트 게임 (0) | 2021.07.07 |
(프로그래머스 연습 문제 풀이) [1]차 비밀지도 (0) | 2021.07.07 |