본문 바로가기

알고리즘 공부 및 문제 풀이/백준(BOJ)

[pro] 프로그래머스 level3 77886 110 옮기기 (Java) - 문자열, StringBuilder

[문제]

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

 

프로그래머스

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

programmers.co.kr

 

[풀이]

먼저 문자열에서 "110"을 전부 추출한다. 그후 남은 문자열에 0이 없으면, 맨 앞에 110이 와야 사전 순으로 제일 앞에 오게 된다. 문자열에 0이 포함되어 있다면 가장 마지막 0의 위치를 찾은 후, 그 다음부터 추출한 문자열을 넣어줘야 한다.

이를 쉽게 하기 위해 StringBuilder를 사용하였다.

 

[코드]

 

import java.util.*;

class Solution {
    public String[] solution(String[] s) {
        String[] answer = new String[s.length];
        
        for(int i=0; i<s.length; i++){
            String ans = solve(s[i]);   
            answer[i] = ans;
        }
        
        return answer;
    }
    
    public String solve(String s){
        StringBuilder sb = new StringBuilder();
        StringBuilder ooz = new StringBuilder();
        
        for(int i=0; i<s.length(); i++){
            Character c = s.charAt(i);
            if(sb.length()>=2 && c=='0' && sb.charAt(sb.length()-2)=='1' && sb.charAt(sb.length()-1)=='1'){
                ooz.append("110");
                sb.delete(sb.length()-2, sb.length());
            }
            else{
                sb.append(c);
            }
        }
        
        if(ooz.length()>0){
            //0이 없으면
            if(sb.indexOf("0")==-1){
                sb.insert(0, ooz);
            }
            else{
                int idx = sb.lastIndexOf("0");
                sb.insert(idx+1, ooz);
            }
        }
        
        return sb.toString();
    }
}