알고리즘 문제 풀이/프로그래머스

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

2023. 7. 2. 19:55
목차
  1. 문제
  2. 나의 풀이

문제

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

 

프로그래머스

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

programmers.co.kr

설명

입출력

나의 풀이

풀이 과정

가장 중요하게 생각해야 할 것은 "("와 ")"이 짝에 맞게 있는지이다.
일단 입력으로 들어온 문자열 s를 for 문으로 돌면서 charAt으로 쪼갠 후 변수 c에 담는다.
스택 안에는 무조건 "(" (왼쪽 괄호)만 들어간다고 생각하면 된다.
c가 "(" 이면 스택에 넣고 c가 ")"이면 스택 안의 "("와 짝을 맞추기 위해 pop() 메서드로 "(" 빼준다.
s = "(())"일 때 모든 for 문을 실행한 후 스택이 비어있으므로 true가 리턴되고
s = "(((())"일 때 모든 for 문을 실행한 후 스택에는 "(("이 남아있으므로(스택이 비어있지 않으므로) false가 리턴된다.

위의 설명을 바탕으로 코드를 구현하였다. 

import java.util.*;

class Solution {
    boolean solution(String s) {
        
        Stack<String> st = new Stack<String>();
        
            for (int i=0; i < s.length(); i++) {
                char c = s.charAt(i);

                if (c == '(') {
                    st.push("(");
                } else { 
                    st.pop();
                }
            }
            return st.empty();
    }
}

하지만 위의 코드를 실행하면!

EmptyStackException이 발생한다. 

이유는 

만약 s = "(())))"일 때 "(" 2개를 스택에 넣고 ")" 2개로 스택에서 "("를 다 뽑았을 때 

스택은 비어있는데 ")"로 인해서 pop() 메서드를 했을 때 예외가 발생하는 것이다. 

예외처리리는 try/catch 또는 throws로 처리해 줄 수 있다. 

try/catch를 사용해서 catch에 걸릴때는 올바른 괄호가 아니게 되므로 바로 false를 리턴해준다. 

아래는 예외처리를 적용한 코드이다.

import java.util.*;

class Solution {
    boolean solution(String s) {
        try {
            Stack<String> st = new Stack<String>();

            for (int i=0; i < s.length(); i++) {
                char c = s.charAt(i);

                if (c == '(') {
                    st.push("(");
                } else {
                    st.pop();
                }
            }

            return st.empty();

        } catch (EmptyStackException e) {
            return false;
        }
    }
}

'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] (JAVA) Lv3 네트워크  (0) 2023.07.07
[프로그래머스] (JAVA) Lv2 게임 맵 최단거리  (2) 2023.07.06
[프로그래머스] (JAVA) Lv1 같은 숫자는 싫어  (0) 2023.07.02
[프로그래머스] (JAVA) Lv1 폰켓몬  (0) 2023.07.02
[프로그래머스] (JAVA) Lv2 더 맵게  (0) 2023.07.02
  1. 문제
  2. 나의 풀이
'알고리즘 문제 풀이/프로그래머스' 카테고리의 다른 글
  • [프로그래머스] (JAVA) Lv3 네트워크
  • [프로그래머스] (JAVA) Lv2 게임 맵 최단거리
  • [프로그래머스] (JAVA) Lv1 같은 숫자는 싫어
  • [프로그래머스] (JAVA) Lv1 폰켓몬
노루스름한맛
노루스름한맛
노루스름한맛
이몸의 블로그
노루스름한맛
전체
오늘
어제
  • 분류 전체보기 (33)
    • 대외 활동 (1)
      • 구름톤 풀스택 1기 (0)
    • 프로젝트 (4)
      • Reviewing(리뷰잉) (4)
    • 알고리즘 문제 풀이 (21)
      • 프로그래머스 (17)
      • 백준 (4)
    • Spring (1)
    • JAVA (1)
    • React native (1)
    • CI,CD (2)
    • TIL & 일기 (2)
      • TIL (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 프로그래머스폰켓몬
  • 최소직사각형
  • 프로그래머스더맵게
  • 폰켓몬
  • 전국장애비장애대학생창업경진대회
  • 전화번호목록
  • reviewing
  • 게임맵최단거리
  • jenkins
  • expogo
  • rosetta
  • 색종이만들기
  • 더맵게
  • elasticsearch
  • 프로그래머스
  • 프로그래머스단어변환
  • cicd
  • Java
  • 재귀함수
  • 백준색종이만들기
  • embeddings
  • 백준
  • OpenSearch
  • 같은숫자는싫어
  • 리뷰잉
  • 프로그래머스카펫
  • 카펫

최근 댓글

최근 글

hELLO · Designed By 정상우.
노루스름한맛
[프로그래머스] (JAVA) Lv2 올바른 괄호
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.