728x90
반응형
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
📌 접근 방식
스택(Stack)을 활용해 괄호의 짝이 맞는지 확인했다.
여는 괄호({, [, ()가 나오면 스택에 push하고,
닫는 괄호(}, ], ))가 나오면 스택의 top과 짝이 맞는지 확인해서 맞으면 pop한다.
이 과정을 반복한 뒤,
- 스택이 비어 있다면 모든 괄호가 올바르게 닫혔다는 의미이고,
- 스택이 비어 있지 않거나,
- 초기부터 닫는 괄호(}, ], ))가 먼저 나온 경우는 유효하지 않은 괄호 문자열이다.
👉🏻 이 경우에도 스택이 비어있을 수 있기 때문에 이를 구분하기 위해 flag 변수를 사용해 중간에 짝이 안 맞는 경우를 추적했다.
PASS CODE
import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
String tmp = s;
boolean flag = true;
for(int j=0; j<s.length(); j++) {
Stack<String> st = new Stack<>();
for(int i=0; i<s.length(); i++) {
flag = true;
if(tmp.charAt(i) == '[' || tmp.charAt(i) == '(' || tmp.charAt(i) == '{') {
st.push(String.valueOf(tmp.charAt(i)));
} else if(tmp.charAt(i) == ']') {
if(st.empty()) {
flag = false;
break;
}
if(!st.empty() && st.peek().equals("[") ) {
st.pop();
}
} else if(tmp.charAt(i) == ')') {
if(st.empty()) {
flag = false;
break;
}
if(!st.empty() && st.peek().equals("(") ) {
st.pop();
}
}
else if(tmp.charAt(i) == '}') {
if(st.empty()) {
flag = false;
break;
}
if(!st.empty() && st.peek().equals("{")) {
st.pop();
}
}
}
if(st.empty() && flag) {
answer ++;
}
String tmpStr = String.valueOf(tmp.charAt(0));
tmp = tmp.substring(1, tmp.length());
tmp += tmpStr;
}
return answer;
}
}
728x90
반응형
'Coding Test > Programmers' 카테고리의 다른 글
[Java][Programmers] n^2 배열 자르기 (0) | 2025.03.13 |
---|---|
[Java][Programmers] 할인 행사 (0) | 2025.03.12 |
[JAVA][Programmers] 예상 대진표 ⭐️ (0) | 2025.03.12 |
[JAVA][Programmers] 멀리 뛰기 ⭐️ (0) | 2025.03.12 |
[SQL][Programmers] 동물의 아이디와 이름 (0) | 2025.03.11 |