본문 바로가기
알고리즘

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

by 육빔 2024. 8. 5.
728x90
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/12909?language=java

 

프로그래머스

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

programmers.co.kr

 

문제 풀이

 

스택을 활용한 기본 문제

 

Stack을 사용하지 않고 ArrayDeque을 사용한 이유

 

Stack의 단점

  • 모든 메소드에 synchronized가 있기 때문에 단일 스레스 환경에서는 성능이 떨어집니다.
  • Vector 클래스를 상속받았기 때문에 LIFO 구조를 유지하는 것이 아니라 중간에서 데이터를 삭제하고 삽입하는 것이 가능합니다.
  • Stack 클래스를 만들 때 초기 용량을 설정할 수 없습니다.

String을 deque에 저장을 시킨다. 여기서 String을 문자열배열로 바꾸기 위해 toCharArray를 사용해야한다. 그 다음 for문으로 돌면서 ( 인 경우 stack에 넣어주고 )인 경우는 deque가 비었거나 맨 위에 있는 원소가 ) 인 경우 false를 반환해준다 그러면 마지막에 ((( 처럼 쌓여있는 경우가 있을텐데 그럴 경우를 대비하여 return 값에 stack.isEmpty() 을 넣어주면 정답 값을 반환해준다.

import java.util.*;
class Solution {
    boolean solution(String s) {
        ArrayDeque<Character> stack = new ArrayDeque<>();
        
        char []arr = s.toCharArray();
        
        for(char a : arr){
            if(a == '('){
                stack.push(a);
            }else if(a == ')'){
                if(stack.isEmpty() || stack.pop() == a){
                    return false;
                }
            }
        }
        return stack.isEmpty();
    }
}

완성

 

 

ref

https://devlog-wjdrbs96.tistory.com/245

 

[Java] ArrayDeque 클래스란 무엇일까?

들어가기 전에 이번 글에서는 ArrayDeque 클래스에 대해 알아보겠습니다. ArrayDeque 클래스는 이름에서도 알 수 있듯이 Deque와 관련된 클래스인 것을 알 수 있습니다. 그리고 Stack 클래스의 문제점, LIF

devlog-wjdrbs96.tistory.com

 

728x90
반응형