티스토리 뷰
프로그래머스 12909번 - 올바른 괄호
요구사항
1. '(' 문자로 괄호가 열렸으면 반드시 짝지어서 ')' 문자로 괄호가 닫혀야 한다.
2. '(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때 올바른 괄호인지를 반환하라.
3. 올바른 괄호인 경우 true, 잘못된 괄호인 경우 false
요구사항 분석 및 풀이과정
1. 문자열의 문자 배열을 순회하여 '('를 만나면 스택에 넣는다. - ')'이 나타나면 짝을 맞춰 삭제해주기 위해서 보관합니다.
2-1. ')'를 만나면 스택의 가장 위의 원소가 '('이면 정상적으로 짝이 맞으므로 삭제하여준다.
2-2. 만약 스택이 비었거나, 가장 위의 원소가 '('이 아니라면 짝이 맞지 않는 잘못된 괄호 문자열(false)이다.
3. 또한 모든 작업을 마쳤는데 스택에 문자가 남아있는 경우는 짝의 개수가 맞지 않아 제거되지 못한 것이므로 잘못된 괄호 문자열(false)이다.
'('를 "스택"에 넣어주는 이유는 가장 나중에 나온 '(' 문자는 가장 먼저 나온 ')'와 짝이 맞아야 하기 때문입니다.
올바른 괄호 문자열인 경우
잘못된 괄호 문자열인 경우
소스코드 작성
import java.util.ArrayDeque;
class Solution {
public boolean solution(String s) {
char[] chars = s.toCharArray();
ArrayDeque<String> stack = new ArrayDeque<>();
for(char v : chars) {
if (v == ')') {
if (!stack.isEmpty() && stack.peekLast().equals("(")) {
stack.pollLast();
continue;
}
return false;
}
stack.offerLast(String.valueOf(v));
}
return stack.isEmpty() ? true : false;
}
}
결과
소스코드 깃허브 주소
마무리
사실상 스택을 쓰지 않아도, '(' 괄호의 수와 ')' 괄호의 수 계산하여 풀어도 풀 수 있다. 하지만 나는 처음에 괄호 문제라서 전형적인 스택 문제라고 생각했고, 스택을 사용했다. 조금만 더 생각을 했더라면 굳이 스택까지 쓸 필요는 없었을 것 같다는 생각이 들지만, 스택을 이용한 방법도 충분히 의미가 있다고 생각한다.
'코딩테스트 > 알고리즘' 카테고리의 다른 글
[알고리즘]프로그래머스 42862번 - 체육복 (0) | 2022.01.10 |
---|---|
[알고리즘]프로그래머스 12945번 - 피보나치 수 (0) | 2022.01.09 |
[알고리즘]프로그래머스 42840번 - 모의고사 (0) | 2022.01.09 |
[알고리즘]프로그래머스 42587번 - 프린터 (0) | 2022.01.09 |
[알고리즘]프로그래머스 42586번 - 기능개발 (0) | 2022.01.09 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- dsu
- 연결리스트
- 정렬
- k8s
- dp
- dfs
- 해쉬
- 스트림
- 카카오
- 오늘의집
- 비트연산
- 문자열
- 구현
- 쓰레드
- set
- 우선순위큐
- JPA
- 스택
- Java
- Uber
- 코딩인터뷰
- 프로그래머스
- sql
- 알고리즘
- kotlin
- 코드 스니펫
- BFS
- TDD
- 탐욕법
- 회고
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함