내 문제 코드 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
힘내자잇!
'프로그래머스 > 레벨2' 카테고리의 다른 글
[MySQL] 프로그래머스 레벨2_진료과별 총 예약 횟수 출력하기 (0) | 2023.02.07 |
---|---|
[JAVA] 프로그래머스 레벨2_전화번호 목록 (0) | 2023.01.31 |
[JAVA] 프로그래머스 레벨2_최솟값 만들기😀 (0) | 2023.01.28 |
[JAVA] 프로그래머스 레벨2_JadenCase 문자열 만들기😀 (0) | 2023.01.28 |
[JAVA] 프로그래머스 레벨2_최댓값과 최솟값😀 (0) | 2023.01.28 |