728x90
⬛ 프로그래머스 | LV.2 괄호 회전하기 - Stack 활용 문풀
https://school.programmers.co.kr/learn/courses/30/lessons/76502
💚나의 풀이
- 괄호 문자열을 1개씩 회전시킨 문자열 str (= 맨앞글자 맨뒤로) 의 상태가 (), [], {} ‘올바르 괄호’ 문자열인 경우에만 answer++해야하는 문제이다.
- 올바른 문자열의 판단은 Stack을 활용해야 한다.
- 여기서 중요한 게, 현재 찍은 charAt(j)의 값과 스택에서 peek()한 값이 짝을 이루어야 pop인데, 짝을 이룰 때 ] [ ← 이런 ‘뒤집어진 모양’은 제외한다.
if(c == ')' && stack.peek() == '(')
//이런 식으로, 현재 문자열 j로 찍은 값이 닫힌 괄호일 때,
//기존 스택 맨위에 담겨진 괄호가 열린 괄호이면 = '올바른 괄호 문자열' 인 경우다
](){}[ 예를 들어, 이 문자열은 짝이 맞는 거끼리 모두 제거한 뒤에 남은 애가
] [ <- 이 모양이다. 이건 뒤집어진 모양이므로 올바르지 않은 괄호가 된다.
💚 제출 코드
import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
for(int i=0; i<s.length(); i++){
Stack<Character> stack = new Stack<>();
//현재 새 str 은 현재 찝은 i ~ 길이 끝까지 뽑고, 그 뒤에 잘린 0, i-1 부분 이어붙임
String str = s.substring(i, s.length()) + s.substring(0, i);
for(int j=0; j<str.length(); j++){
char c = str.charAt(j);
if(stack.isEmpty()){
stack.push(c);
}else if(c == ')' && stack.peek() == '('){
stack.pop();
}else if(c == '}' && stack.peek() == '{'){
stack.pop();
}else if(c == ']' && stack.peek() == '['){
stack.pop();
}else{
stack.push(c);
}
}
//이 과정 끝난 뒤에 스택 빈상태면 짝이 맞는 경우이므로
if(stack.isEmpty()) answer++;
}
return answer;
}
}
728x90
'코딩 테스트 [준비] > [문풀] 프로그래머스_문풀_조지기' 카테고리의 다른 글
프로그래머스 | LV.2 방문 길이 - HashMap과 객체 equals, hashCode 재정의 문풀 (Java) (42) | 2023.12.22 |
---|---|
프로그래머스 | LV.2 피로도 - 완전 탐색, DFS 문풀 (Java) (35) | 2023.12.21 |
프로그래머스 | LV.2 의상 - HashMap & 경우의 수 문풀 (Java) (0) | 2023.12.18 |
프로그래머스 | LV.2 예상 대진표 - 단순 구현 문풀 (Java) (2) | 2023.12.11 |
프로그래머스 | LV.2 영어 끝말잇기 - HashMap 활용 (Java) (3) | 2023.12.06 |