본문 바로가기
Coding Test/프로그래머스

[프로그래머스] Lv.2 올바른 괄호 (자바)

by CSEGR 2024. 6. 26.
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