728x90
문제 설명
올바르게 쌍을 이루는 괄호의 정의는 '(' 문자로 열면 ')' 문자로 닫아야 함을 의미합니다.
예를 들어,
- "()()" 또는 "(())()"는 올바른 괄호입니다.
- ")()(" 또는 "(()("는 잘못된 괄호입니다.
'(' 또는 ')'로만 구성된 문자열이 주어지면 s문자열이 s올바른 괄호이면 true를 반환하고 그렇지 않으면 false를 반환하는 해결 함수를 완성하세요.
제약
- 문자열의 길이 s: 100,000 이하의 자연수
- 문자열은 s'(' 또는 ')'로만 구성됩니다.
예
에스 | 답변 |
"()()" | 진실 |
"(())()" | 진실 |
")()(" | 거짓 |
"(()(" | 거짓 |
예시 #1
위의 예와 동일합니다.
문제 분석
1. Stack을 사용하여 짝이 맞으면, 즉 올바른 괄호"( )"면 제거 하자. -> 짝짓는 문제는 stack 이용( 햄버거, 인형뽑기 ...)
2. stack에 요소가 없으면 그냥 넣기
3. stack에 요소가 있으면
3-1."("이라면 그냥 push
3-2. ")"이라면 4번으로.
4-1.짝이 맞으면 pop
4-2. 짝이 안 맞으면 push
5. 짝이 다 맞으면 올바른 괄호!
문제 풀이
import java.util.Stack;
class Solution {
boolean solution(String s) {
boolean answer = false;
Stack<Character> st = new Stack<>();
for(int i= 0; i<s.length(); i++){
char ch = s.charAt(i);
//stack이 비어있으면 일단 넣자.
if(st.size() == 0) st.push(ch);
else{
//새로운게 ')'이면 짝이 맞을지도..!
if(ch == ')')
{
// "()" 짝이 맞으면 pop
if(st.peek() == '(') st.pop();
// 아니면 push
else st.push(ch);
}
//새로운게 '('이면 어차피 짝이 안맞아.
else
st.push(ch);
}
}
//stack 크기가 0이면 올바른 괄호 !!
if(st.size() == 0) answer = true;
return answer;
}
}
자바 스프링을 공부하면서 느낀 것.. 자바 기초를 탄탄히 다지자...
1. 쉬운 문제라고 얕보지 말기
2. 코딩 사고력을 기르기
728x90
'Coding Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.2 구명 보트 (자바) (0) | 2024.06.29 |
---|---|
[프로그래머스] Lv.1 성격 유형 검사하기 (java) (0) | 2024.05.17 |
[프로그래머스] Lv.1 체육복 (java) (0) | 2024.05.09 |
[프로그래머스] Lv.1 공원산책 (java) (0) | 2024.05.07 |
[프로그래머스] Lv.1 달리기 경주 (Java) (0) | 2024.05.05 |