seunghyun Note
[프로그래머스] - 괄호 회전하기 with Java 본문
728x90
반응형
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/76502
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
1. 스택으로 문제를 해결하기
2. 열리는 괄호는 3종류이다. '[' , '(', '{' 로 구성되어 있고 닫는 괄호와 짝을 맞춰야 한다.
3. 일단 stack이 empty 일 경우에는 push를 한다.
4. 처음 스택을 peek 했을 때 다음 값이 닫는 괄호일 경우에는 pop을 해준다.
결국 우리는 [] () {} 일때 pop을 해서 stack 을 empty로 바꾸는게 목적이다.
stack이 empty가 된다면 순서와 상관없이 짝을 다 맞춘 것이다.
하지만 이 문제는 간단한 스택으로만 해결하는 것이 아닌 회전이다.
이 문제를 풀기 전에 회전 문제를 풀 때 내 머리가 돌아갈거 같았는데 회전은 결국 index에 변화를 주는 것이다.
그냥 index를 처리하게 된다면 -1, 또는 문자열의 크기보다 클 수 있기 때문에
만능 소스인 (index+cnt) % string.length()를 추가 해준다.
cnt를 추가해주고 문자열의 크기로 나눠준다면 초과하거나 -1이 될 수가 없다.
이렇게 회전을 시키면 문제를 해결하기에 매우 용이하다.
import java.util.Stack;
class Solution {
public int solution(String s) {
int count = 0;
char data = 0;
for (int cnt = 0; cnt < s.length(); cnt++) {
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < s.length(); i++) {
data = s.charAt((i + cnt) % s.length());
if (stack.isEmpty()) {
stack.push(data);
} else if (stack.peek() == '[' && data == ']') {
stack.pop();
} else if (stack.peek() == '(' && data == ')') {
stack.pop();
} else if (stack.peek() == '{' && data == '}') {
stack.pop();
} else
stack.push(data);
}
if (stack.empty())
count++;
}
return count;
}
}
왜 9점인지는 모르겠지만 문제를 풀면서 재미를 느꼈다.
728x90
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
[프로그래머스] - 문자열 내 마음대로 정렬하기 With JAVA (0) | 2024.01.06 |
---|---|
[프로그래머스] - 카드 뭉치 with JAVA (0) | 2024.01.06 |
[프로그래머스] -푸드 파이트 대회 with JAVA (0) | 2024.01.06 |
[프로그래머스] - 두개 뽑아서 더하기 with JAVA (0) | 2024.01.05 |
[프로그래머스] - 명예의 전당 with JAVA (0) | 2024.01.05 |