티스토리 뷰
1. Problem
면접에서도 자주 나올 수 있는 문제중에 하나입니다. 여러 조합의 괄호 기호가 OPEN, CLOSE 매칭이 딱딱 맞아 떨어지는지 체크하는 문제입니다.
public boolean solution(String str) {
...
}
1.1 입력 / 결과
스택 자료 구조
입력 가능한 String 값은 아래와 같습니다.
-
()()() —> true
-
((()))()() —> true
- )( —> false
- ((())))) —> false
2. Solution
2.1 Approach 1
-
String의 한 char씩 스킨한다
-
OPEN_괄호 ‘(‘ 을 만나면 스택에 push한다
-
CLOSE_괄호 ‘)’를 만나면 스택에서 pop을 한다
-
스택에 아무것도 남아 있지 않으면, valid한 괄호인것으로 판단할 수 있다
public boolean solution(String str) {
char[] chars = str.toCharArray();
Stack<Character> stack = new Stack<>();
if (str.length() % 2 != 0) {
return false;
}
if (chars[0] == ')') {
return false;
}
for (char ch : chars) {
if (ch == '(') {
stack.push(ch);
} else {
// close parenthesis
stack.pop();
}
}
return stack.isEmpty();
}
소스코드는 github에서도 확인할 수 있습니다.
이 문제에서는 소괄호 (, )만 사용했지만, 여러 괄호 { [ ( ) ] }가 더 있는 경우에도 여러 조합이 valid한지를 체크하는 코드로 더 문제를 키울 수 있을 것 같습니다. 기존 아이디어와 같이 스택을 사용하면 업그레이된 문제도 쉽게 해결하면 가능합니다. 이건 독자분들에게 남겨두도록 하겠습니다.
- ({{}}(())) --> true
- ({}[[[]]{}) --> true
3. Reference
'algorithm' 카테고리의 다른 글
Algorithm : 정수값에서 1이 설정된 bit를 카운트하기 (1) | 2018.10.28 |
---|---|
Algorithm : 2개의 array에서 common value 찾기 (0) | 2018.10.21 |