CodingTest/Programmers
[프로그래머스/Programmers] 올바른 괄호 (Java - Stack - Level2)
JONG_UK
2023. 1. 17. 16:11
728x90
반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
⭐️ 코드
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
반응형