문제: https://school.programmers.co.kr/learn/courses/30/lessons/76502
1. 코드
import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
for(int i = 0; i < s.length(); i++) {
Stack <String> stack = new Stack<>();
for(String str : s.split("")) {
if(stack.isEmpty())
stack.push(str);
else if((str.equals("}") && stack.peek().equals("{")) || (str.equals(")") && stack.peek().equals("(")) || (str.equals("]") && stack.peek().equals("[")))
stack.pop();
else stack.push(str);
}
if(stack.isEmpty())
answer++;
s = s.substring(1) + s.charAt(0);
}
return answer;
}
}
2. 설명
스택을 이용하여 닫힌 괄호가 나올 때 그에 적합한 여는 괄호가 Stack의 peek() 결과인지 확인한 후 맞다면 pop을 해주며 아니라면 무시합니다. 여는 괄호가 나온다면 push를 진행합니다.
반복문이 종료되고 Stack이 비어있다면 answer의 값을 1증가시키고, 문자열의 첫번째 문자를 문자열의 제일 뒤로 이동시켜서 해당 작업을 문자열의 길이만큼 진행합니다.
3. 정리
- 괄호 문제는 Stack을 이용하면 쉽게 해결됩니다.
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges
'컴퓨터 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 42747번: H-Index [Java] (0) | 2023.09.23 |
---|---|
프로그래머스 - 131701번: 연속 부분 수열 합의 개수 [Java] (0) | 2023.09.19 |
프로그래머스 - 138476번: 귤 고르기 [Java] (0) | 2023.08.25 |
프로그래머스 - 12914번: 멀리 뛰기 [Java] (0) | 2023.08.24 |
프로그래머스 - 12980번: 점프와 순간 이동 [Java] (0) | 2023.08.23 |