[Programmers/Java] 올바른 괄호 || Stack & Queue

2022. 10. 4. 15:31·🎯PS

프로그래머스

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

programmers.co.kr

프로그래머스 자바 올바른 괄호 12909

더보기

문제 설명 )

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

  • "()()" 또는 "(())()" 는 올바른 괄호입니다.
  • ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.

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

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

 

 
📌 문제 풀이
스택이나 큐를 이용하여 문제를 쉽게 해결할 수 있다!
입력된 문자열을 하나씩 for문을 돌면서
1. "("인 경우, push
2. ")"인 경우, pop
만약 스택이나 큐가 비워져있어서 pop이 불가능하다면, False
for문이 모두 돌고 나서 스택이나 큐에 원소가 남아있는 경우도 False이다.
 
시간 초과 된 코드

class Solution {
    boolean solution(String s) {
        String[] strings = s.split("");

        Stack<String> stack = new Stack<>();
        for (String string : strings) {
            if (string.equals("(")) {
                stack.push("(");
            } else {
                if (stack.isEmpty()) {
                    return false;
                } else {
                    stack.pop();
                }
            }
        }
        if (stack.isEmpty()) {
            return true;
        } else {
            return false;
        }
    }
}

split으로 배열에 담아두는 코드를 charAt으로 바로 비교될 수 있도록 수정하여 해결하였다.
 

✅ [ CODE ]

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

스택을 이용하여 push & pop을 이용한 풀이이다.
 

✅ [ CODE ]

import java.util.LinkedList;
import java.util.Queue;

class Solution {
    boolean solution(String s) {
        Queue<String> queue = new LinkedList<>();
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '(') {
                queue.add("(");
            } else {
                if (queue.isEmpty()) {
                    return false;
                } else {
                    queue.remove();
                }
            }
        }
        if (queue.isEmpty()) {
            return true;
        } else {
            return false;
        }

    }
}

큐 클래스를 이용하여 풀이한 풀이이다.

반응형
저작자표시 (새창열림)
'🎯PS' 카테고리의 다른 글
  • [Programmers/Python] 폰켓몬, 전화번호 목록 || Hash
  • [Programmers/Python] 유전 법칙
  • [Programmers/Python] 올바른 괄호 || Stack & Queue
  • [Programmers/Java] 42576_완주하지 못한 선수
dmaolon
dmaolon
프로그래밍을 공부한 내용을 기록하는 공간입니다.
  • dmaolon
    기록 남기기
    dmaolon
  • 전체
    오늘
    어제
    • ALL (260)
      • ➰ Series (5)
      • 🎯PS (168)
        • Algorithm (15)
      • ☕ Java (11)
      • 🍀 Spring Boot (29)
      • 💬 Database (9)
      • 🐣 Computer Science (14)
      • 👍 Daily (4)
      • 🎁ReactJS (4)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 태그

    dfs
    자바
    코딩
    알고리즘
    BFS
    Spring
    백준
    프로그래밍
    파이썬
    프로그래머스
  • hELLO· Designed By정상우.v4.10.1
dmaolon
[Programmers/Java] 올바른 괄호 || Stack & Queue
상단으로

티스토리툴바