March
31st,
2021
문제
Given a string s containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid.
An input string is valid if:
- Open brackets must be closed by the same type of brackets.
- Open brackets must be closed in the correct order.
Valie Parentheses 문제는 전형적인 stack문제이다. 오늘 가볍게 스택을 공부하며 익힌것을 코드에 적용해볼 수 있는 기회였다.
따봉 코드
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for(char ch: s.toCharArray()) {
if(ch == '(' || ch == '{' || ch == '[') {
stack.push(ch);
} else if(!stack.isEmpty()){
if(ch == ')' && stack.peek() == '(' ||
ch == '}' && stack.peek() == '{' ||
ch == ']' && stack.peek() == '[' ) {
stack.pop();
} else {
return false;
}
} else {
stack.push(ch);
}
}
return stack.isEmpty();
}
public boolean isValid(String s) {
Stack<Character> stack = new Stack<Character>();
for (char c : s.toCharArray()) {
if (c == '(')
stack.push(')');
else if (c == '{')
stack.push('}');
else if (c == '[')
stack.push(']');
else if (stack.isEmpty() || stack.pop() != c)
return false;
}
return stack.isEmpty();
}
나의 구현 코드
public static boolean isValid(String s) {
Stack<Character> par1 = new Stack<Character>();
for(int i=0; i< s.length(); i++){
char c = s.charAt(i);
if(c=='(' || c=='[' || c== '{')
par1.push(c);
else{
if(par1.size() > 0 &&((c==')' && par1.peek() == '(')
|| (c==']' && par1.peek() == '[')
|| c=='}' && par1.peek() == '{')){
par1.pop();
} else return false;
}
}
if(par1.size() == 0) return true;
return false;
}
쉬운 문제라서 바로바로 풀긴 했지만, 코드를 조금 더 간결하게 작성하는 방법을 익히자!
그리고 더 나아질 수 있을 만한 점 :
- for구문을 돌 때 인덱스로 character 접근하지 말고
char c : s.toCharArray()
로 한 번에 접근하기 - 마지막 리턴시 size()로 판단하지 말고 isEmpty()로 한 번에 조회하기 ==> 사상은 동일한데, 뭔가
isEmpty()
가 더 가독성이 좋은 느낌?