
| 문제 | 레벨 | 정답률 |
|---|---|---|
| 올바른 괄호 | Lv.2 | 78% |


import java.util.*;
class Solution {
boolean solution(String s) {
boolean answer = true;
Stack<Character> stack = new Stack<>();
for(int i = 0; i<s.length(); i++){
if(s.charAt(i) == '('){
stack.push(s.charAt(i));
}else{
if(stack.isEmpty()){
answer = false;
break;
} else{
stack.pop();
}
}
}
if(!stack.isEmpty()){ //마지막 case 고려
answer = false;
}
return answer;
}
}
처음에는 마지막 if문을 넣지 않고 돌렸는데, 한두개의 테스트 케이스에서 걸려서 오답처리 되었다.
이유는 ((()( 와 같은 케이스 때문,,
ㄴ '('가 더 많아서 반복문이 끝나도 스택이 비어있지 않기 때문에 마지막으로 한 번 더 고려를 해줘야 했다.
import java.util.Stack;
class Solution {
boolean solution(String s) {
Stack<Character> stack = new Stack<>();
for (char c : s.toCharArray()) {
if (c == '(') {
stack.push(c);
} else if (c == ')') {
if (stack.isEmpty()) {
return false; // 닫는 괄호가 여는 괄호 없이 나타났을 때
}
stack.pop();
}
}
return stack.isEmpty(); // 모든 괄호가 올바르게 닫혔는지 확인
}
}
우선 가장 크게 달라진 점은 마지막에 if문으로 비어있는지를 확인하던 부분이 return 안으로 들어가 간소화 되었다는 점!
String 클래스의 메서드
문자열을 char 배열로 변환하는 기능 제공
String str = "Hello, world!";
char[] charArray = str.toCharArray();
for (char c : charArray) {
System.out.println(c);
}
평소 나는 문자열을 for문으로 돌 경우, charAt() 메서드를 활용하여 앞에서부터 찾아나가는 방식으로 사용했었다.
물론 성능 측면에서는 charAt()을 사용하는게 메모리 차원에서 이득일 수는 있지만 가독성이 떨어지고 문자열에 직접적인 영향을 준다는 단점도 있다.
toCharArray() 메서드는 존재만 알고 사용해본 적이 없었는데 앞으로 문자열을 for문으로 돌때는 적극 활용해봐야겠다.
전체적으로 문제는 굉장히 간단했지만 평소 잘 쓰지 않던 Stack을 다시 한 번 연습해볼 수 있어서 좋았고, 새로운 메서드를 접할 기회가 되어 good ~,~
쉬운 문제도 다시 보자,,