코딩테스트
[프로그래머스] 올바른 괄호_12909
라임온조
2023. 7. 6. 18:21
GitHub - Lee-Min-Jung/coding_test_practice
Contribute to Lee-Min-Jung/coding_test_practice development by creating an account on GitHub.
github.com
회고
- 괄호 검사면 스택이지 하고 스택으로 풀기 시작했다. 스택으로 분류된 걸 알고 있어서 뭐 당연...
- 맨 처음에 푼 풀이는 String 배열을 만들어서 풀었는데 정확성은 다 맞았지만 효율성에서 틀렸다. 그래서 좀 살펴보니 String 말고 Character로 풀면 된다는 말이 있어서 그렇게 푸니 효율성도 통과했다. 주어진 string을 char배열로 만들어서 해당 배열을 도는 것.
- 맨 처음 풀이는 아래와 같다
// s를 돈다
// 여는 괄호면 스택에 넣는다
// 닫는 괄호면 스택에서 pop 하면서 여는 괄호인지 확인한다
// 만약 여는 괄호 아니면 바로 올바르지 않은 거니까 멈추기
// 다 하고 나서 스택 비어있지 않으면 올바르지 않은 것
import java.util.*;
class Solution {
boolean solution(String s) {
String[] sArr = s.split("");
Stack<String> st = new Stack<String>();
// s 돌기
for(String str : sArr){
// 여는 괄호면 스택에 넣기
if(str.equals("(")){
st.push(str);
continue;
}
// 닫는 괄호면 스택에서 pop하면서 여는 괄호 나오는지 확인
if(str.equals(")")){
if(!st.isEmpty() && st.pop().equals("(")){
continue;
}else{
return false;
}
}
}
// 마지막에 스택 확인
if(!st.isEmpty()){
return false;
}
return true;
}
}
기억
- String 메서드 중 toCharArray는 문자열을 단순히 문자 배열로 변경하는 것. 보통 O(N)
- String 메서드 중 split("")은 정규표현식을 해석해야하기 때문에 toCharArray보다 더 많은 작업이 수행된다. 따라서 O(N)이긴 하지만 시간이 더 걸린다.
체크
풀이 횟수 | 시간 | 정답 여부 | 참고 여부 |
1 | 40분 | O |