-
카테고리
-
세부 분야
알고리즘 · 자료구조
-
해결 여부
미해결
valid_Parentheses문제 질문
20.05.27 15:54 작성 조회수 120
1
package Queue_Stack;
import java.util.Stack;
public class Valid_Parentheses {
public static void main(String[] args) {
String s = "{[]}";
// String exp2 = "({)}";
System.out.println(isValid(s));
}
public static boolean isValid(String s) {
// 1. 에러체크
if (s.length() % 2 != 0) return false;
Stack<Character> stack = new Stack<Character>();
// 2.
for (int i = 0; i < s.length(); i++) {
switch (s.charAt(i)) {
case ')':
if (!stack.empty() && stack.peek() == '(')
stack.pop();
break;
case '}':
if (!stack.empty() && stack.peek() == '{')
stack.pop();
break;
case ']':
if (!stack.empty() && stack.peek() == ']')
stack.pop();
break;
default:
stack.push(s.charAt(i));
break;
}
}
return stack.empty();
}
}
이결과가 계속 false로 나옵니다... 이유를 못찾겠네요 ㅠㅠ 그리고 isEmpty와 empty 메소드의 차이가 있을까요?
답변을 작성해보세요.
2
푸샵맨 코딩스터디
지식공유자2020.05.28
안녕하세요? 님
제가 방금 글을봤습니다. 최대한 빨리 답변을 드려야하는데 죄송합니다.
질문주신 ValidParenthese , 즉 괄호문제는 자주 나오는 문제입니다. 이 문제를 보는 순간 스택을 사용해야 한다는 감이 와야 합니다.
1. 질문주신 내용에서 잘못된 부분을 찾았습니다.
if (!stack.empty() && stack.peek() == ']')
->if (!stack.empty() && stack.peek() == '[')
'[' 이걸로 바꿔주셔야합니다.
2. 이런 실수는 자주 하게됩니다.
그래서 실전에서는 ide(이클리스)에 코딩을 일단하시고 디버깅을 돌려보셔야합니다.
실전에서 하실때 , 안되니까 당황하게 되서 시간을 엄청나게 까먹게 됩니다.
나중에 보면 진짜 별거 아닌데..
기업에서 제공하는 코딩문제 사이트에서 디버깅하면 시간도 오래걸립니다.
그리고 이클립스에서 돌린 코드를 다시 코딩문제 셤 사이트에 복사 붙여넣기 해도 테스트케이스가 불충분하다고 나옵니다. 이럴때는 엣지케이스를 다양하게 생각해야합니다. 예를들어 내가 만든 변수를 int 최대값으로 제한한다거나 하셔야합니다.
결론은 실전에서도 이클립스로 코딩을 하고 디버깅을 하고 엣지케이스를 생각해보고 , 다한내용을
코딩문제 사이트에 복사붙여넣기 하세요~
즐코딩하세요~
답변 1