[programmers] Java Lv. 2 - 올바른 괄호

2022. 10. 4. 17:18·Algorithm Solving/Java

문제

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

예를 들어

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

 

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

 

제한사항

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

 

입출력 예


풀이

주어진 문자열을 탐색할 때 '('를 만나면 queue에 enqueue하고, ')'를 만나면 dequeue를 해서 queue가 비어있으면 true, 아니면 false를 반환한다.

단, ')'를 만났을 때 queue의 크기가 0이라면 바로 false를 반환한다.

import java.util.LinkedList;
import java.util.Queue;
class Solution {
    boolean solution(String s) {
        Queue<Character> que = new LinkedList<Character>();
        for(char x : s.toCharArray()) {
            if(x=='('){
                que.add(x);
            }
            else{
                if(que.size()>0) que.poll();
                else return false;
            }
        }
        if(que.size()==0) return true;
        else return false;
    }
}

스택으로도 풀이가 가능하다! 

queue대신 stack을 선언한 다음, enqueue(add() or offer())와 dequeue(poll() or remove())를 각각 push()와 pop()으로 변경하면 된다.


Queue

큐(queue)는 컴퓨터 과학 분야에서 쓰이는 컴퓨터의 기본적인 자료 구조의 한가지로, 먼저 집어 넣은 데이터가 먼저 나오는 FIFO(First In First Out)구조로 저장하는 형식을 말한다. 영어 단어 queue는 표를 사러 일렬로 늘어선 사람들로 이루어진 줄을 말하기도 하며, 먼저 줄을 선 사람이 먼저 나갈 수 있는 상황을 연상하면 된다.

나중에 집어 넣은 데이터가 먼저 나오는 스택과는 반대되는 개념이다.

프린터의 출력 처리나 윈도 시스템의 메시지 처리기, 프로세스 관리 등 데이터가 입력된 시간 순서대로 처리해야 할 필요가 있는 상황에 이용된다.

 

Java에서 Queue 사용

1. Queue 선언

import java.util.LinkedList;
import java.util.Queue;
Queue<Integer> queue = new LinkedList<>(); //int형 queue 선언
Queue<String> queue = new LinkedList<>(); //String형 queue 선언
Queue<Character> queue = new LinkedList<>(); //char형 queue 선언

2. 초기화: clear()

queue.clear();

3. Enqueue: add(), offer()

Queue<String> queue = new LinkedList<>(); //String형 queue 선언
queue.add("first");   // queue에 "first" 추가
queue.add("second");   // queue에 "second" 추가
queue.offer("third"); // queue에 "third" 추가

4. Dequeue: poll(), remove()

Queue<Integer> queue = new LinkedList<>();
queue.offer(1);     // queue에 값 1 추가
queue.offer(2);     // queue에 값 2 추가
queue.offer(3);     // queue에 값 3 추가
int pollValue = queue.poll();       // queue에 첫번째 값을 반환하고 제거
// pollValue == 1
int removeValue = queue.remove();   // queue에 첫번째 값을 반환하고 제거
// removeValue == 2

- poll()과 remove() 차이점

queue.clear();
queue.poll();   // queue가 비어있으면 null 반환
queue.remove(); // queue가 비어있으면 NoSuchElementException 발생

5. Queue의 크기: size()

int queSize = queue.size();

6. 첫번째 값 반환: peek(), element()

Queue<Integer> queue = new LinkedList<>();
queue.offer(1);     // queue에 값 1 추가
queue.offer(2);     // queue에 값 2 추가
int firstQueVal1 = queue.peek(); // firstQueVal1 == 1
int firstQueVal2 = queue.element(); // firstQueVal2 == 1

- peek()과 element() 차이점

queue.clear();
queue.peek();    // queue가 비어있으면 null 반환
queue.element(); // queue가 비어있으면 NoSuchElementException 발생

 

참고: https://ko.wikipedia.org/wiki/%ED%81%90_(%EC%9E%90%EB%A3%8C_%EA%B5%AC%EC%A1%B0), https://coding-factory.tistory.com/602

저작자표시 비영리 변경금지 (새창열림)

'Algorithm Solving > Java' 카테고리의 다른 글

[programmers] Java Lv. 2 - 피보나치 수  (0) 2022.10.19
[programmers] Java Lv. 2 - 숫자의 표현  (0) 2022.10.19
[programmers] Java Lv. 2 - 이진 변환 반복하기  (1) 2022.09.30
[programmers] Java Lv. 2 - 최솟값 만들기  (1) 2022.09.30
[programmers] Java Lv. 2 - JadenCase 문자열 만들기  (2) 2022.09.30
'Algorithm Solving/Java' 카테고리의 다른 글
  • [programmers] Java Lv. 2 - 피보나치 수
  • [programmers] Java Lv. 2 - 숫자의 표현
  • [programmers] Java Lv. 2 - 이진 변환 반복하기
  • [programmers] Java Lv. 2 - 최솟값 만들기
기만나🐸
기만나🐸
공부한 내용을 기록합시다 🔥🔥🔥
  • 기만나🐸
    기만나의 공부 기록 🤓
    기만나🐸
  • 전체
    오늘
    어제
    • ALL (147)
      • TIL (Today I Learned) (56)
      • Dev Projects (15)
      • Algorithm Solving (67)
        • Java (52)
        • SQL (15)
      • Certifications (8)
        • 정보처리기사 실기 (8)
  • 인기 글

  • 태그

    GROUP BY
    jwt
    greedy
    programmers
    그리디
    백준
    dp
    HTML
    java
    Google Fonts
    다이나믹프로그래밍
    시뮬레이션
    완전탐색
    BOJ
    websocket
    javascript
    bootstrap
    DFS
    CSS
    백트래킹
    Subquery
    mysql
    join
    BFS
    jQuery
    jpa
    프로그래머스
    sql
    자료구조
    Firebase
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기만나🐸
[programmers] Java Lv. 2 - 올바른 괄호
상단으로

티스토리툴바