📝 문제
🔥 시도해본 접근 방식
1. 문자열s를 한 문자씩 잘라 Queue로 선언
2. Queue를 이용하여 맨 앞 문자를 뽑아서 뒤로 붙이는 방식으로 s의 길이만큼 s를 회전 시키는 반복문 선언
3. Queue에 있는 문자길이만큼 반복하는 반복문선언
4. 문자열의 문자 하나씩 Stack에 넣으면서 괄호가 모두 완성되면 answer를 1 증가시키고 괄호가 완성되지 않으면 문자열을 회전후 [3] 부터 재시도
1️⃣ 첫번째 시도
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
class Solution {
public int solution(String s) {
// 문자열의 맨 앞 문자를 뽑아서 뒤로 붙이는 방식으로 문자열을 회전시키기 위해 Queue 사용
Queue<String> sQueue = new LinkedList<>();
for (int i = 0; i < s.length(); i++) {
sQueue.offer(String.valueOf(s.charAt(i)));
}
int answer = 0;
// s의 길이만큼 s를 회전 시키는 반복문 선언
for (int i = 0; i < s.length(); i++) {
// sQueue를 복제
Queue<String> tempQueue = new LinkedList<>(sQueue);
Stack<String> tempStack = new Stack<>();
for (int j = 0; j < s.length(); j++) {
tempStack.push(tempQueue.poll());
if (tempStack.peek().equals(")") || tempStack.peek().equals("}") || tempStack.peek().equals("]")) {
if (tempStack.size() < 2) {
break;
}
String u = tempStack.pop() + tempStack.pop();
if (!(u.equals(")(") || u.equals("}{") || u.equals("]["))) {
break;
}
}
// 정상적으로 반복문을 모두 마친 경우 +1
if (j == s.length() - 1) {
answer++;
}
}
// 문자열을 왼쪽으로 한칸 회전
sQueue.offer(sQueue.poll());
}
return answer;
}
}
한가지 케이스에서 실패가 떴다. 예외케이스가 있는듯 하다.
잘못된 조건식으로 인해 문자열이 "{{{" 와 같이 들어가면 카운트가 되는 결함을 발견하였다.
✨ 성공 코드
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
class Solution {
public int solution(String s) {
int answer = 0;
if(s.length() == 1) return answer;
// 문자열의 맨 앞 문자를 뽑아서 뒤로 붙이는 방식으로 문자열을 회전시키기 위해 Queue 사용
Queue<String> sQueue = new LinkedList<>();
for (int i = 0; i < s.length(); i++) {
sQueue.offer(String.valueOf(s.charAt(i)));
}
// s의 길이만큼 s를 회전 시키는 반복문 선언
for (int i = 0; i < s.length(); i++) {
// sQueue를 복제
Queue<String> tempQueue = new LinkedList<>(sQueue);
Stack<String> tempStack = new Stack<>();
for (int j = 0; j < s.length(); j++) {
tempStack.push(tempQueue.poll());
if (tempStack.peek().equals(")") || tempStack.peek().equals("}") || tempStack.peek().equals("]")) {
if (tempStack.size() < 2) {
break;
}
String u = tempStack.pop() + tempStack.pop();
if (!(u.equals(")(") || u.equals("}{") || u.equals("]["))) {
break;
}
}
// 정상적으로 반복문을 모두 마친 경우 +1
if (j == s.length() - 1 && tempStack.size() == 0) {
answer++;
}
}
// 문자열을 왼쪽으로 한칸 회전
sQueue.offer(sQueue.poll());
}
return answer;
}
}
'스터디 > 99클럽 코테 스터디 TIL' 카테고리의 다른 글
99클럽 코테 스터디 30일차 Find Right Interval (0) | 2024.08.21 |
---|---|
99클럽 코테 스터디 29일차 Longest Increasing Subsequence (0) | 2024.08.19 |
99클럽 코테 스터디 27일차 할인 행사 (0) | 2024.08.18 |
99클럽 코테 스터디 26일차 달리기 경주 (0) | 2024.08.16 |
99클럽 코테 스터디 25일차 Evaluate Division (0) | 2024.08.16 |