[프로그래머스] 110 옮기기 - Java

문제링크 🚩

https://school.programmers.co.kr/learn/courses/30/lessons/77886

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

📕 문제 접근 📕
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;  
    }  
}**

 

📖 배운점 📖

스택 자료 구조에 대해 더 자세하게 알 수 있었다 .