728x90
반응형
⭐️ 코드
boolean solution(String s) {
if(s.length() == 0 || s.length()%2 != 0 || s.charAt(0) == ')' || s.charAt(s.length()-1) == '(') {
return false;
}
ArrayDeque<Character> stack = new ArrayDeque<>();
for(int i = 0; i<s.length(); i++) {
char c = s.charAt(i);
if(c == ')') {
if(stack.size() < 1) {
return false;
}
stack.pop();
} else {
stack.addLast(c);
}
}
return (!stack.isEmpty()) ? false : true;
}
💡 문제 풀이
String s ="()())(()";
테스트 케이스 5번 11번에서 자꾸 막힌다면 위 테스트 케이스를 직접 돌려보자.
stack이 비었는데 pop() 연산을 해서 런타임 에러가 뜨는 것이다.
효율성 부분에서는 Character 형을 쓰는 것이 성공했다. split() 함수는 쓰면 안 되는 걸까?
첫 번째 풀이
boolean solution(String s) {
boolean answer = true;
if(s.charAt(0) == ')' || s.charAt(s.length()-1) == '(') {
return false;
}
ArrayDeque<String> stack = new ArrayDeque<String>();
String[] sArr = s.split("");
int a = 0;
int b = 0;
for(String item : sArr) {
stack.addLast(item);
if(")".equals(item)) {
a++;
} else {
b++;
}
}
if(a==b) {
answer = true;
}
return answer;
}
두 번째 풀이
boolean solution(String s) {
boolean answer = true;
if(s.charAt(0) == ')' || s.charAt(s.length()-1) == '(') {
return false;
}
ArrayDeque<String> stack = new ArrayDeque<String>();
String[] sArr = s.split("");
for(String item : sArr) {
if(item.equals(")")) {
stack.pop();
} else {
stack.addLast(item);
}
}
if(!stack.isEmpty()) {
return false;
} else {
return true;
}
}
세 번째 풀이 (효율성 통과)
boolean solution(String s) {
boolean answer = true;
if(s.length() == 0 || s.length()%2 != 0 || s.charAt(0) == ')' || s.charAt(s.length()-1) == '(') {
return false;
}
ArrayDeque<Character> stack = new ArrayDeque<>();
for(int i = 0; i<s.length(); i++) {
char c = s.charAt(i);
if(c == ')') {
stack.pop();
} else {
stack.addLast(c);
}
}
if(!stack.isEmpty()) {
return false;
} else {
return true;
}
}
성공한 풀이
boolean solution(String s) {
if(s.length() == 0 || s.length()%2 != 0 || s.charAt(0) == ')' || s.charAt(s.length()-1) == '(') {
return false;
}
ArrayDeque<Character> stack = new ArrayDeque<>();
for(int i = 0; i<s.length(); i++) {
char c = s.charAt(i);
if(c == ')') {
if(stack.size() < 1) {
return false;
}
stack.pop();
} else {
stack.addLast(c);
}
}
return (!stack.isEmpty()) ? false : true;
}
👀 후기
망할 테스트케이스...
728x90
반응형
'CodingTest > Programmers' 카테고리의 다른 글
[프로그래머스/Programmers] 주식가격 (Java - Stack - Lv2) (0) | 2023.01.18 |
---|---|
[프로그래머스/Programmers] 괄호 회전하기 (Java - Stack - Lv2) (0) | 2023.01.18 |
[프로그래머스/Programmers] 기능개발 (Java - Level2) (0) | 2023.01.16 |
[프로그래머스/Programmers] 행렬과 연산 (Java - Queue - Level4) (0) | 2023.01.16 |
[프로그래머스/Programmers] [1차] 캐시 (Java - LRU - Level2) (0) | 2023.01.13 |