프로그래머스/레벨2
[JAVA] 프로그래머스 레벨2_올바른 괄호😀
박차
2023. 1. 28. 22:55
내 문제 코드 1
boolean solution(String s) {
boolean answer = true;
String[] str = s.split("");
int left = 0;
int right = 0;
if(str[0].equals(")")){
return false;
}else {
for(int i = 0 ; i<s.length();i++) {
if(str[i].equals("(")) {
left++;
}else {
right++;
}
}
}
return answer = (left==right) ? true : false;
}
1. 첫번째가 ")"라면 false
2. "("와 ")"의 수가 값은 true
스택으로 풀어볼까..
내 문제 코드 2
boolean solution(String s) {
boolean answer = true;
String[] str = s.split("");
Stack<String> stack = new Stack<String>();
for (int i = 0; i < s.length(); i++) {
if (str[i].equals("(")) {
stack.push("(");
} else {
if(stack.empty()) {
return false;
}
stack.pop();
}
}
return answer = (stack.empty()) ? true : false;
}
아까보다는 나은데.. 효율성 실패
내 성공 코드
boolean solution(String s) {
boolean answer = true;
Stack<String> stack = new Stack<String>();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(') {
stack.push("(");
} else {
if(stack.empty()) {
return false;
}
stack.pop();
}
}
return answer = (stack.empty()) ? true : false;
}
1. s.split대신 charAt으로 효율성 높임
2. stack이 비어있으면(괄호가 올바르면) true 아님 false
다른 사람 코드
boolean solution(String s) {
boolean answer = false;
int count = 0;
for(int i = 0; i<s.length();i++){
if(s.charAt(i) == '('){
count++;
}
if(s.charAt(i) == ')'){
count--;
}
if(count < 0){
break;
}
}
if(count == 0){
answer = true;
}
return answer;
}
1. '(' 면 더하고 ')'면 빼기
2. count가 0보다 크면 false 같으면 true
힘내자잇!