Valid Parentheses
괄호 문자열은 모든 여는 괄호가 같은 종류의 괄호로 닫히고, 괄호 쌍이 서로 겹치지 않고 서로의 안에 들어갈 때 균형을 이룹니다. 괄호에는 세 종류가 있습니다. 둥근 괄호 (), 대괄호 [], 중괄호 {}입니다.
예를 들어, {[()()]}는 균형을 이룹니다. 각 괄호 쌍이 자신을 감싸는 괄호 쌍의 안에서 닫히기 때문입니다. 하지만 {(})는 그렇지 않습니다. 중괄호가 닫힐 때, 그 뒤에 열린 둥근 괄호가 아직 닫히지 않았기 때문입니다. ((와 같은 문자열도 균형을 이루지 않습니다. 열린 괄호 두 개를 닫는 괄호가 없기 때문입니다.
문자열 s를 받아, 문자열이 (, ), [, ], {, } 문자만으로 이루어져 있고 괄호가 균형을 이루면 true를, 그렇지 않으면 false를 반환하는 isValid라는 함수를 작성하세요.
균형을 이룬다는 것은 각 닫는 괄호가 아직 닫히지 않은 가장 최근의 여는 괄호와 일치하고, 두 괄호의 종류가 같으며, 마지막에 닫히지 않은 여는 괄호가 남아 있지 않음을 의미합니다.
제약 조건: 1 ≤ s.length ≤ 10^4.
함수
- arg1string
- 반환값boolean
예제
- 입력
- arg1 = "[]{}()"
- 출력
- true
- 입력
- arg1 = "{[()()]}"
- 출력
- true
- 입력
- arg1 = "{(})"
- 출력
- false
제출 시 숨은 테스트 +13개
힌트
하나씩 열어 보세요. 열 때마다 조금 더 알려 줍니다.
문자열을 왼쪽에서 오른쪽으로 읽으세요. 닫는 괄호가 나오면, 어떤 여는 괄호를 닫을 수 있을까요?
가장 최근에 열렸으며 아직 열려 있는 여는 괄호만 닫을 수 있습니다. 가장 나중에 열린 것이 가장 먼저 닫힙니다. 이것이 바로 스택이 유지하는 순서입니다.
여는 괄호가 나올 때마다 스택에 넣습니다. 닫는 괄호가 나오면 스택이 비어 있지 않아야 하고, 맨 위의 괄호가 같은 종류여야 합니다. 해당 괄호를 꺼낸 뒤 계속합니다. 문자열이 끝났을 때 스택이 비어 있어야 균형이 맞습니다.
이 문제의 전체 풀이가 곧 추가됩니다.
비슷한 문제
같은 아이디어를 쓰는 문제입니다. 두세 개를 풀면 패턴이 몸에 익습니다.
Python
def isValid(s):
# 여기에 코드를 작성하세요케이스 1
케이스 2
케이스 3
입력
arg1 = "[]{}()"기대값
true