Skip to content

Commit 63395be

Browse files
committed
feat: valid-parentheses
1 parent a1325de commit 63395be

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

valid-parentheses/haxr369.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import java.util.Stack;
2+
3+
class Solution {
4+
/**
5+
* 1. 열기는 같은 타입의 닫기가 필요함.
6+
* 2. 열기는 정확한 순서로 닫기가 필요함.
7+
* 3. 모든 닫기 괄호는 열기 괄호에 대응됨..!
8+
*
9+
* 스택을 이용하기
10+
* 1. 열기괄호를 스택에 넣기
11+
* 2. 닫기괄호를 보면 스택의 상단을 보기
12+
* > 상단과 닫기 괄호가 다르면? false
13+
* > 같으면 상단을 pop
14+
* 3. 맨 마지막에 스택은 비어있어야함.
15+
*/
16+
public boolean isValid(String s) {
17+
char[] brkts = { '(', ')', '{', '}', '[', ']' };
18+
19+
Stack<Integer> st = new Stack<>();
20+
// System.out.println("j->");
21+
for (int i = 0; i < s.length(); i++) {
22+
for (int j = 0; j < 6; j++) {
23+
// System.out.println("ㅑ->"+s.charAt(i)+" j->"+brkts[j]);
24+
if (s.charAt(i) == brkts[j]) {
25+
// 열기면 스택에 넣기
26+
if (j % 2 == 0) {
27+
st.push(j);
28+
// System.out.println("j->"+j);
29+
} else { // 닫기면 top이랑 비교하기
30+
// 스택이 비어있으면 false;
31+
if (st.size() == 0) {
32+
return false;
33+
}
34+
int top = st.pop();
35+
// System.out.println("j->"+j+" top->"+top+" remn_size->"+st.size());
36+
if (top + 1 != j) {
37+
// 상단값이 닫기 괄호랑 맞지 않으면 false
38+
return false;
39+
}
40+
}
41+
}
42+
}
43+
}
44+
// 스택에 괄호가 남아있으면 false
45+
if (st.size() > 0) {
46+
return false;
47+
}
48+
return true;
49+
}
50+
}

0 commit comments

Comments
 (0)