[프로그래머스] Lv2 올바른 괄호

changi123·2023년 8월 22일
post-thumbnail

문제설명

코드

class Solution {
    boolean solution(String s) {
             boolean answer = false;
        int cnt1= 0;
        int cnt2= 0;
        int cnt3= 0;
        
        
        
        for(int i= 0; i <s.length();i++) {
        	if(s.charAt(i) == '(') {
        		cnt1++;
        		cnt2++;
        	} else {
        		cnt1--;
        		cnt3++;
        		if(cnt1 <0) {
        			return answer ;
        		}
        	}
        }
        
        if(cnt2 != cnt3) {
        	return answer;
        }
        answer = true;
        return answer;
    }
}

내 코드 설명

(1) 생각한 경우의 수

  • '(' 를 만나면 cn1++ 를 ')' 를 만나면 cnt1-- 를 해서 만약 cnt1이 음수가 된다면 false를 반환
  • 만약 위 과정을 거치고 '(' 개수 cnt2 와 ')' 개수 cnt3의 개수가 같지 않다면 false를
  • 위 두 가지 과정을 모두 통과 했다면 true 를 반환

다른 사람 풀이

import java.util.Stack;
class Solution {
    boolean solution(String s) {
        boolean answer = true;  
        String res = "YES";
        Stack<Integer> st = new Stack<>();

        for (int i = 0; i < s.length(); i++) {
                if (s.charAt(i) == '(') {
                    st.push(1);
                } else if (s.charAt(i) == ')') {
                    if (st.isEmpty()) {
                        answer = false;
                        break;
                    } else {
                        st.pop();
                    }
                }
            }

            if(!st.isEmpty()) {

                answer = false;

            }

            System.out.println(res);
return answer;
    }   

}

다른 사람 코드 설명

(1) 스택을 이용하여 풀었다.
(2) 스택 객체 st 를 선언하고 만약 '(' 를 만나면 st에 push로 삽입 그렇지 않고 만약 st가 비어있다면 false를 반환 그렇지 않다면 ')' pop 을 통해 꺼낸다
(3) 만약 위 과정을 거쳐 st 객체가 비어있지 않다면 false를 반환

느낀점

스택에 대해 정리해보자

  • 스택이란?
    - 사전적 정의는 '쌓다'이다. 상자에 물건을 쌓듯이 데이터를 쌓는 자료구조이다. Stack은 마지 막에 저장한 데이터를 가장 먼저 꺼내는 (Last In FirstOut) FIFO 구조로 되어있다.
  • 선언
    - Stack st = new stack();
  • 사용 메소드
    - st.push() : 데이터 추가
    • st.pop() : 최근에 추가된(TOP) 데이터 삭제
    • st.peek() : 최근에 추가된 (TOP) 데이터를 삭제하지않고 조회
    • st.empty() : stack의 값이 비었는지 확인, 비어있다면 true, 비어있지 않다면 false

코딩테스트에 스택이 나올 수 있으니 참고해서 나중에 다시 볼 수 있도록 하자

profile
개발자 홍찬기 꾸준한 사람이 되자

0개의 댓글