어제 밤에 계속 고민을 한 결과, "(" 모양이 여러번 나올 수도 있기 때문에 ")"와 대응할 수 있도록 짝을 맞춰주려면 queue가 아닌 Stack을 사용해야 할 것 같은 생각이 들었다 .
나의코드3차)
import java.util.Stack;
import java.util.Arrays;
class Solution {
boolean solution(String s) {
boolean answer = true;
Stack<String> stack = new Stack<>();
char[] charArr = s.toCharArray();
String[] arr = new String[charArr.length];
for(int i = 0; i<charArr.length; i++){
arr[i] = String.valueOf(charArr[i]);
}
for(int j=0; j<arr.length; j++){
if(arr[j]=="("){
stack.push("(");
}
else{
if(stack.isEmpty()){
return false;
}
else{
stack.pop();
}
}
}
if(!stack.isEmpty()){
answer = false;
}
else{
answer = true;
}
return answer;
}
}
하지만 계속
전부 false가 나온다. 문제가 생겼다면
else{ }안의 stack.isEmpty()가 오류를 발생시켰을 것 같다. 더 고민해보고 문제를 마무리 지을 수 있도록 해야겠다 .
마지막 review 중 심각한 오점을 찾아내었다
바로 문자열을 비교할 때, .equals를 사용하지 않은 것...
.equals를 사용하니 바로 해결되었다
최종코드)
import java.util.Stack;
import java.util.Arrays;
class Solution {
boolean solution(String s) {
boolean answer = true;
Stack<String> stack = new Stack<>();
char[] charArr = s.toCharArray();
String[] arr = new String[charArr.length];
for(int i = 0; i<charArr.length; i++){
arr[i] = String.valueOf(charArr[i]);
}
for(int j=0; j<arr.length; j++){
if(arr[j].equals("(")){
stack.add(arr[j]);
}
else{
if(stack.size()==0){
answer=false;
return answer;
}
else{
stack.pop();
}
}
}
if(stack.size()>0){
answer = false;
}
else{
answer = true;
}
return answer;
}
}
이런 사소한 문법들을 실수하지 않도록 주의해야겠다.
'코딩테스트 연습(with java) > 프로그래머스' 카테고리의 다른 글
프로그래머스<가장 큰 수>-2차(2022.09.15수정)-3차(2022.09.16풀이 참고 후 code review) (0) | 2022.09.14 |
---|---|
프로그래머스<기능개발>-수정요구 (0) | 2022.09.13 |
프로그래머스<올바른 괄호> (0) | 2022.09.11 |
프로그래머스<최소직사각형> -해결완료 (0) | 2022.09.06 |
프로그래머스<최소직사각형> - 완전 탐색 공부 후 수정예정 (0) | 2022.09.05 |