일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 프로그래머스
- 렌더링 파이프라인
- 그리디알고리즘
- 알고리즘
- 파일시스템 구현
- 컨디션 변수
- 쓰레드
- codility
- 자료구조
- 멀티쓰레드
- 다이나믹 프로그래밍
- 백준
- 타입 객체
- directx
- 스케줄링
- 영속성
- I/O장치
- DirectX12
- DirectX 12
- 병행성
- 락
- 동적계획법
- 멀티프로세서
- OS
- Direct12
- 그리디 알고리즘
- 병행성 관련 오류
- 디자인패턴
- 다이나믹프로그래밍
- 운영체제
Archives
- Today
- Total
기록공간
올바른 괄호 (프로그래머스) 본문
반응형
스택을 알고 있다면 어렵지 않게 풀 수 있는 문제였다.
스택을 이용하여 입력받은 괄호정보를 순회하며 '('를 만나면 그 값은 스택에 집어넣는다. 만약 ')'를 만나면 스택에서 '(' 하나를 꺼낸다. 모든 작업을 마치고 만약 스택이 비어 있다면 그것은 올바른 괄호이므로 true를 반환하면 된다.
하지만 주의할 점이 있는데 처음부터 ')'이 나오는 경우이다. 이 경우 '('를 스택에서 꺼내고 싶어도 스택이 비어 있어 꺼낼 수 없으므로 바로 false를 반환하면 된다.
코드는 다음과 같다.
#include<string>
#include<stack>
using namespace std;
bool solution(string s)
{
bool answer = false;
stack<char> v;
for(const auto& iter : s)
{
if(iter == '(') v.push(iter); // '('를 만나면 스택에 넣는다.
else if(!v.empty()) v.pop(); // ')'를 만나면 스택에서 '('하나를 지운다.
else return answer; // 스택이 비어 있는 상태이므로 이것은 올바르지 않은 괄호이다.
}
if(v.empty()) answer = true; // 스택이 비어 있다면 올바른 괄호이다.
return answer;
}
반응형
'Algorithm > 문제' 카테고리의 다른 글
체육복 (프로그래머스) (0) | 2020.06.16 |
---|---|
다음 큰 숫자 (프로그래머스) (0) | 2020.06.12 |
카펫 (프로그래머스) (0) | 2020.06.12 |
가장 큰 정사각형 찾기 (프로그래머스) (0) | 2020.06.10 |
숫자 야구 (프로그래머스) (0) | 2020.06.09 |
Comments