문제링크 🚩
https://school.programmers.co.kr/learn/courses/30/lessons/77886
📕 문제 접근 📕
110이 생기면 최대한 앞으로 뽑아내는 로직을 생각했다.
원래 문자에 110이 존재하지 않는다면 원본 그대로 저장하고 존재한다면 마지막 0뒤에 110을 찾은 수 만큼 넣는 로직을 생각하였다.
💻 Code 💻
**import java.util.Stack;
class Solution {
public String\[\] solution(String\[\] s) {
String\[\] answer = new String\[s.length\]; // 배열 사이즈
StringBuilder sb;
for(int i=0; i<s.length; i++) { // 테스트 케이스 하나씩
String str = s\[i\];
Stack<Character> stack = new Stack<>();
int cnt = 0; //110 사이즈
for(int j=0; j<str.length(); j++) { // 4, 9 , 10
char z = str.charAt(j); // 첫번쨰 인덱스
if(stack.size()>=2) {
char y = stack.pop(); // 1
char x = stack.pop(); // 1
// z == 1
if(x=='1' && y=='1' && z=='0') {
cnt++;
} else {
stack.push(x);
stack.push(y);
stack.push(z);
}
} else {
stack.push(z); // s = 1 1 1 0
}
}
int idx = stack.size(); // 1
boolean flag = false;
sb = new StringBuilder();
while(!stack.isEmpty()) {
if(!flag && stack.peek()=='1') {
idx--; // 0
}
if(!flag && stack.peek()=='0') {
flag = true;
}
sb.insert(0, stack.pop()); //sb = 1
}
if(cnt>0) {
while(cnt>0) {
sb.insert(idx, "110");
idx += 3;
cnt--;
}
answer\[i\] = sb.toString();
} else {
answer\[i\] = s\[i\]; // 1
}
}
return answer;
}
}**
📖 배운점 📖
스택 자료 구조에 대해 더 자세하게 알 수 있었다 .
'JAVA > Algo 풀이' 카테고리의 다른 글
[백준] 1786 찾기 -KMP(JAVA) (2) | 2023.08.05 |
---|---|
[프로그래머스] 야근지수 - JAVA (0) | 2023.08.01 |
[프로그래머스] 이중우선순위큐 - TreeMap (0) | 2023.07.26 |
[프로그래머스] 이중우선순위큐 (0) | 2023.07.25 |
[백준] 5676.음주코딩 - 세그먼트 트리 (JAVA) (2) | 2023.07.16 |