728x90
반응형
⭐️ 코드
import java.util.ArrayDeque;
public class PL2_5 {
// 괄호 회전하기
public int solution(String s) {
int answer = 0;
// 길이가 홀수일 때 괄호 만들어 지지 않음
if (s.length() == 1 || s.length() % 2 != 0) {
return 0;
}
// 문자열 회전
for (int i = 0; i < s.length(); i++) {
// 괄호 확인
if (confirmStr(s)) {
answer++;
}
// 회전
s = s.substring(1, s.length()) + s.substring(0, 1);
}
return answer;
}
private boolean confirmStr(String s) {
ArrayDeque<Character> stack = new ArrayDeque<>();
char[] c = s.toCharArray();
for (char item : c) {
if(stack.isEmpty()) {
stack.addLast(item);
continue;
}
if (item == '[' || item == '{' || item == '(') {
stack.addLast(item);
} else if (item == ']' && stack.peekLast().equals('[')) {
stack.pollLast();
} else if (item == '}' && stack.peekLast().equals('{')) {
stack.pollLast();
} else if (item == ')' && stack.peekLast().equals('(')) {
stack.pollLast();
} else {
return false;
}
}
return stack.isEmpty() ? true : false;
}
💡 문제 풀이
올바른 괄호 문제처럼 이 문제도 Stack을 활용해서 푸는 문제다. 다만 괄호 종류가 다양해지고 회전한다는 개념이 포함됐을 뿐이다.
문자열을 왼쪽으로 회전시킨다는 개념이 처음엔 잘 이해가 가지 않았지만 아래의 포문 내의 코드처럼 문자열의 1번 index 요소부터 끝까지와, 문자열의 0번 index 요소를 맨 뒤에 잘라 붙이면 회전이 된다.
s = s.substring(1, s.length()) + s.substring(0, 1);
우리는 문자열 괄호가 제대로 된 것인지 찾아서 answer 개수를 올려줘야 한다. 그래서 아래 함수를 하나 만들었다.
if (confirmStr(s)) {
answer++;
}
private boolean confirmStr(String s) {
ArrayDeque<Character> stack = new ArrayDeque<>();
char[] c = s.toCharArray();
for (char item : c) {
if(stack.isEmpty()) {
stack.addLast(item);
continue;
}
if (item == '[' || item == '{' || item == '(') {
stack.addLast(item);
} else if (item == ']' && stack.peekLast().equals('[')) {
stack.pollLast();
} else if (item == '}' && stack.peekLast().equals('{')) {
stack.pollLast();
} else if (item == ')' && stack.peekLast().equals('(')) {
stack.pollLast();
} else {
return false;
}
}
return stack.isEmpty() ? true : false;
}
함수를 보면 그냥 쉽게 올바른 괄호 문제처럼 풀었다.
대신 '[ , { , ('로 시작했다면 꼭 닫히는 날이 올 텐데, 마지막에서 닫힐 땐 가장 나중에 push 된 괄호와 동일한 형태의 괄호로 닫혀야 한다. 따라서 첫 번째로 닫히지 않거나 그다음에 닫히지 않는다면 바로 false를 return 해 준다.
비어있을 때 poll을 할 수 없기 때문에 꼭 isEmpty() 메소드를 통해 조건을 설정해 주자!!!
👀 후기
그냥저냥 어렵진 않지만 뭔가 어렵다..
처음부터 stack을 통해 회전시켜서 바로 찾는 방법은 없을까???
728x90
반응형
'CodingTest > Programmers' 카테고리의 다른 글
[프로그래머스/Programmers] 최댓값과 최솟값 (Java - Lv2) (0) | 2023.01.21 |
---|---|
[프로그래머스/Programmers] 주식가격 (Java - Stack - Lv2) (0) | 2023.01.18 |
[프로그래머스/Programmers] 올바른 괄호 (Java - Stack - Level2) (0) | 2023.01.17 |
[프로그래머스/Programmers] 기능개발 (Java - Level2) (0) | 2023.01.16 |
[프로그래머스/Programmers] 행렬과 연산 (Java - Queue - Level4) (0) | 2023.01.16 |