본문 바로가기
코딩테스트

[스택] 프로그래머스 올바른 괄호 자바 java

by Enhydra lutris 2023. 4. 24.

1학년? 2학년?때 스택 배우면서 배웠던 문제중 하나이다!

그때는 c언어로 했지만 오늘은 자바로 풀어보겠다~

자바에서 스택을 쓴지 좀 오래되서 메소드 쓰는법이 잘 기억이 안나서 다시 공부해서 풀었다 ㅋㅋ

java 스택 사용방법

선언 방법

import java.util.Stack; //import
Stack<Integer> stack = new Stack<>(); //int형 스택 선언

삽입 방법

Stack<Integer> stack = new Stack<>(); //int형 스택 선언
stack.push(1);     // stack에 값 1 추가

 

삭제 방법

Stack<Integer> stack = new Stack<>(); //int형 스택 선언
stack.push(1);     // stack에 값 1 추가
stack.push(1);     // stack에 값 1 추가
stack.pop();       // stack에 값 삭제
stack.clear();     // stack 값 전체 삭제

 

최상단값 가져오기

Stack<Integer> stack = new Stack<>(); //int형 스택 선언
stack.push(1);     // stack에 값 1 추가
stack.peek();     // stack의 최상단 값 출력

 

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/12909

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어

"()()" 또는 "(())()" 는 올바른 괄호입니다.
")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.

제한사항

문자열 s의 길이 : 100,000 이하의 자연수
문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

풀이

s를 하나하나 읽으면서 (면 푸쉬를 )면 팝을 하면된다.

그리고 (와 )의 개수가 같아야 하기 때문에 마지막에 stack.isEmpty()를 해서 스택이 비어 있는지 확인해야 한다.

코드

import java.util.*;

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++){
            if(s.charAt(i) == '('){
                stack.push('(');
            }
            else if(s.charAt(i) == ')' && !stack.isEmpty()){
                stack.pop();
            }
            else{
                return false;
            }
        }
        return stack.isEmpty();
    }
}

 

댓글