문제
https://programmers.co.kr/learn/courses/30/lessons/12909
코딩테스트 연습 - 올바른 괄호
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은
programmers.co.kr
풀이
자료구조 스택을 활용하여 해결할 수 있었다.
문제를 풀기 이전에 우리는 올바른 괄호의 특징이 여는 괄호와 닫는 괄호의 쌍이 1:1 매칭이 된다는 특징을 알고 가야 한다.
이 점을 이용하여 문자열의 모든 원소들에 대하여 탐색하면서 만약 여는 괄호인 '(' 가 나오면 스택에 넣어주었고, 닫는 괄호인 ')'가 나오면 스택에서 빼주었다.
이런 방식으로 탐색을 하다 보면 여는 괄호와 닫는 괄호의 쌍이 1:1 매칭이 되어야만 최종적으로 문자열 탐색을 모두 수행했을 때 스택의 크기가 0이 되고 1:1 매칭이 안된다면 닫는 괄호보다 여는 괄호의 개수가 더 많아서 스택의 크기가 1 이상일 것이고, 닫는 괄호가 더 많다면 스택의 크기가 0인데 pop 하려 해서 에러가 날 것이다.
그래서 최종적으로 우리는 문자열 탐색을 수행한 이후 스택의 크기가 0이면 올바른 괄호임을, 그게 아니라면 올바르지 않은 괄호임을 리턴해주면 된다. 추가로 닫는 괄호가 더 많을 때 코드가 실행 도중 에러를 만나면 안 되므로 크기가 0일 때 pop 하려 하면 올바르지 않은 괄호임을 리턴해주면 된다.
코드
+import java.util.Stack;
class Solution {
boolean solution(String s) {
boolean answer = true;
Stack<Character> st = new Stack<Character>();
for(int i = 0; i < s.length(); i++) {
if(s.charAt(i) == '(') {
st.add(s.charAt(i));
} else {
if(st.size() == 0) {
return false;
}
st.pop();
}
}
answer = st.size() == 0 ? true : false;
return answer;
}
}
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 프로그래머스 Level3 네트워크 Java (0) | 2022.05.27 |
---|---|
[프로그래머스] 프로그래머스 Level2 JadenCase 문자열 만들기 Java (0) | 2022.05.26 |
[프로그래머스] 프로그래머스 Level2 소수 찾기 Java (0) | 2022.05.26 |
[프로그래머스] 프로그래머스 Level2 더 맵게 Java (0) | 2022.05.26 |
[프로그래머스] 프로그래머스 Level1 신고 결과 받기 Java (카카오 코딩테스트) (0) | 2022.05.25 |