치악산 복숭아
[Leetcode] 20. Valid Parentheses - C++ 본문
왼쪽 오른쪽 괄호가 짝이 맞는지를 검사하는 문제이다.
- 접근 방법
- 주어진 괄호 문자열의 현재 인덱스의 문자가 왼쪽 괄호`([{` 인지 확인
- 맞다면 스택에 넣는다
- 아니라면 2번으로
- 현재 스택이 비어있는지 확인
- 비어있다면 false 얼리 리턴 -> `)}]` 이 먼저 왔으므로 짝이 맞지 않음
- 비어있지 않다면 3번으로
- 현재 인덱스의 문자가 오른쪽 괄호`)]}` 인지 확인
- 맞다면 스택의 top 문자가 짝이 맞는 왼쪽 괄호인지 체크
- 맞다면 top 문자를 꺼내기(pop) -> 짝이 맞는 괄호
- 아니라면 false 얼리 리턴 -> 짝이 맞지 않는 괄호
- 맞다면 스택의 top 문자가 짝이 맞는 왼쪽 괄호인지 체크
- 1~3번을 반복한 뒤 스택이 비어있는지 여부를 리턴
- 주어진 괄호 문자열의 현재 인덱스의 문자가 왼쪽 괄호`([{` 인지 확인
위 방법을 코드로 구현하면 아래와 같다.
#include <stack>
class Solution {
public:
bool isValid(string s) {
stack<char> stack;
for(char ch: s) {
if (ch == '(' || ch == '[' || ch == '{') {
stack.push(ch);
}
else {
if (stack.empty()) {
return false;
}
if ((ch == '}' && stack.top() == '{') ||
(ch == ')' && stack.top() == '(') ||
(ch == ']' && stack.top() == '[')) {
stack.pop();
}
else {
return false;
}
}
}
return stack.empty();
}
};
새롭게 알게 된 것: c++ 라이브러리에 기본적으로 stack 자료구조가 구현되어 있다 (짱 편함!)
'PS:0' 카테고리의 다른 글
[Leetcode] 278. First Bad Version - C++ (0) | 2025.02.01 |
---|---|
[Leetcode] 409. Longest Palindrome - C++ (0) | 2025.01.31 |
[프로그래머스] 로또의 최고 순위와 최저 순위 - Javascript, python (3) | 2021.12.08 |
[BOJ] 9012 괄호 - Python (0) | 2021.10.21 |
[프로그래머스] 카펫 - Python (0) | 2021.09.09 |
Comments