스택(Stack)을 활용한 알고리즘 문제풀이
- 입력: '(' 또는 ')' 로만 이루어진 문자열 s가 주어집니다.
- 출력: 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return합니다.
예제 코드
import java.util.*;
class Solution {
boolean solution(String s) {
boolean answer = true;
Stack<Character> stack = new Stack<>();
char[] arr = s.toCharArray();
for (char c : arr) {
if (c == '(') stack.push(c);
else {
if (stack.isEmpty()) return false;
else stack.pop();
}
}
if (!stack.isEmpty()) return false;
return answer;
}
}
- 입력 값으로 주어진 s에 대하여 .toCharArray()를 활용하여 문자 배열로 변환합니다.
- 문자 배열에 대하여 loop를 돌며 괄호의 종류에 따라 분기처리합니다.
- 괄호가 모두 짝이 있는지를 확인해야 하는 문제이기에, '(' 를 Stack에 모아두었습니다.
- 그리고 괄호가 닫힐 때마다 (')'일 경우) stack에서 괄호 개수 / 괄호 존재 여부를 확인하여 없을 경우 false를 반환합니다.
- loop를 다 돌고나서 stack에 남은 열린 괄호가 있는지 isEmpty()로 확인을 해줍니다.
- 남은 괄호가 있다면 짝이 없는 괄호가 있는 것이기 때문에 false를 반환해줍니다.
회고
- 오늘도 주석으로 구현 기능을 정해두고 코드를 짰습니다. 뿌듯합니다.
- 벨로그 글의 가독성이 떨어지는 것 같습니다. 개선할 방법을 생각해보겠습니다.
- 조건문을 작성할 때, code-smell을 경계해보겠습니다.
- early return을 공부해보겠습니다.