문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/76502
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
우선 주어진 문자열이 올바른 괄호 문자열인지 체크하고, 한 칸씩 회전하는 과정을 반복하는 것이 핵심이기 때문에 substring() 메서드를 활용해서 문자열을 회전시켰습니다.
그리고, Stack 자료구조를 사용하여 주어진 문자열이 올바른 괄호 문자열인지 확인했습니다. 그리고 스택이 비어있는지 확인하는 로직을 try - catch 블록 내부에서 체크해서 해결했습니다.
더보기
- stack이 비어있을 때 pop() 연산을 수행하면 발생하는 EmptyStackException을 이용
전체 코드
더보기
import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
for(int i = 0; i < s.length(); i++) {
answer += check(s);
s = s.substring(1) + s.substring(0, 1);
}
return answer;
}
private int check(String str) {
Stack<Character> stack = new Stack<>();
int index = 0;
try {
for(int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
switch(c) {
case ']':
if(stack.peek() != '[') return 0;
stack.pop(); break;
case '}':
if(stack.peek() != '{') return 0;
stack.pop(); break;
case ')':
if(stack.peek() != '(') return 0;
stack.pop(); break;
default: stack.push(c); break;
}
}
} catch(EmptyStackException e) {
//스택이 비어있으면 0 반환
return 0;
}
//모든 연산을 마치고 스택이 비어있으면 주어진 문자열이
//올바른 괄호 문자열이므로 1을 반환
return stack.isEmpty() ? 1: 0;
}
}
정리
- 스택이 비어있을 때, pop() 연산을 수행하면 EmptyStackException이 발생함.
300x250
'알고리즘 & 코딩 테스트' 카테고리의 다른 글
[프로그래머스] Lv.3 표현 가능한 이진트리 문제 해결 과정(Java) (0) | 2024.06.24 |
---|---|
[Solved.ac] Dyanmic Programming 문제 해결 과정(Java) (0) | 2024.06.20 |
[Solved.ac] G5 평범한 베낭 해결 과정(Java) (0) | 2024.06.18 |
[프로그래머스] Lv.3 파괴되지 않은 건물 해결 과정(Java) (0) | 2024.06.17 |
[프로그래머스] Lv.3 부대 복귀 문제 해결 과정(Java) (3) | 2024.06.13 |