https://leetcode.com/problems/remove-outermost-parentheses/description/
문제 이해
- '()'한쌍의 완전한 괄호 문자열 s가 주어진다
- s는 "", "(" + A + ")", A+B 의 형태
- A는 완전한 괄호를 의미한다.
- 예시) "", "()", "(())()", "(()(()))" => 유효한 괄호형태
- s를 입력받아서 가장 바깥 쪽의괄호를 제거 한 후 남은 완전한 괄호 문자열을 return한다
- 예시: "((())(()()()))" => (())(()()()) 를 리턴한다
(여기서 이해하기가 조금 힘들었다)
- 예시: "((())(()()()))" => (())(()()()) 를 리턴한다
문제풀이
- stack, StringBuilder 사용
- "(" 가 들어올 때 push()
- 하지만 size()로 확인 시 stack에 0개 이상이라면 가장 바깥쪽이 존재한다는 것
StringBuilder에 append()
- 하지만 size()로 확인 시 stack에 0개 이상이라면 가장 바깥쪽이 존재한다는 것
- ")"가 들어올 때 pop()
- size() > 0 라면(가장 바깥 쪽 괄호가 남아있다) append()를 진행
- StringBiulder에 저장된 값을 toString()을 이용하여 return
class Solution {
public String removeOuterParentheses(String s) {
Stack<Character> st = new Stack<>();
StringBuilder sb = new StringBuilder(); //괄호 저장
// 정답 괄호 => stack에 쌓이는 것 없이 바로 사라짐
// 오답 괄호 => stack에 '('가 하나 무조껀 남게 되며 마지막에 사라지게 된다.
for(int i = 0; i < s.length(); i++){
char c = s.charAt(i);
if(c == '('){
//가장 바깥 쪽 괄호가 존재할 때
if(st.size() > 0) {
sb.append(c);
}
st.push(c);
// ')'가 들어올 차례
// 2가지의 상황이 존재
//1. pop이후 stack에 아무것도 남아있지 않을 때
//2. pop이후 stack에 데이터가 존재할 때(가장 바깥 쪽 괄호)
} else {
st.pop();
if(st.size() > 0){
sb.append(c);
}
}
}
return sb.toString();
}
}
stack을 연습 중 이며
문제를 더 많이 풀어서 얼른 easy난이도들은 쉽게 넘겨버리고 싶다.
'Algorithm > leetcode' 카테고리의 다른 글
[leetcode]1074.Remove All Adjacent Duplicates In String (0) | 2023.08.30 |
---|---|
[leetcode] 1614. Maximum Nesting Depth of the Parentheses (0) | 2023.08.29 |
[leetcode] 844.Backspace String compare (0) | 2023.08.27 |
[leetcode] 155.Min Stack (0) | 2023.08.26 |
[leetcode] 856.Score of Parentheses(Retry) (0) | 2023.08.20 |