class Solution {
boolean solution(String s) {
// 1. String s 를 한 글자씩 잘라서 확인한다.
// (시작은 무조건 '(' 이어야 된다. ')'면 바로 false 리턴.)
// 2. (와 )의 수를 각각 카운트한다. 수가 같다면 true 리턴.
// 3. 하지만 (의 수가 ) 보다 작다면 false 리턴.
boolean answer = true;
int count1 = 0;
int count2 = 0;
for(int i=0; i<s.length(); i++) {
if(s.charAt(0) == '(') {
if(s.charAt(i) == '(') {
count1 += 1;
} else {
count2 += 1;
}
if (count1 < count2) {
return false;
}
} else {
return false;
}
}
answer = (count1 == count2) ? true: false;
return answer;
}
}
나는 (와 )의 카운트를 각각해서 마지막에 그 수가 같은지 비교하는 방법으로 풀었는데, 카운트를 하나만 해서 +, -를 해서 0이 되는 경우 true를 리턴하는 방법이 더 깔끔하다.
class Solution {
boolean solution(String s) {
boolean answer = true;
int count = 0;
char[] sArray = s.toCharArray();
for(char c : sArray) {
if(c == '(') {
count++;
} else {
count--;
if(count < 0) return false; // ')'가 먼저 나오면 false 리턴
}
}
answer = count == 0 ? true : false;
return answer;
}
}
정확성: 69.5
효율성: 30.5
합계: 100.0 / 100.0
import java.util.Stack;
class Solution {
boolean solution(String s) {
boolean answer = true;
Stack<Character> stack = new Stack<>();
for(char c : s.toCharArray()) {
if(c == '(') {
stack.push(c);
} else {
if(stack.isEmpty()) return false;
stack.pop();
}
}
answer = stack.isEmpty()? true: false;
return answer;
}
}
정확성: 69.5
효율성: 30.5
합계: 100.0 / 100.0