[Coding test] 0405_no.3 (java)
2020-04-05
Coding test / 0405_no.3
문제설명
유출 x
풀이
package T0405;
import java.util.*;
public class t3 {
public static int solution(String road, int n) {
int answer = 0;
StringBuilder sb = new StringBuilder();
sb.append(road);
int ck = 0;
for(int i=0;i<road.length(); i++) {
if(road.charAt(i) == '0')
ck++;
}
if(ck <=n)
return road.length();
int lock = 0;
LinkedList<Integer> zero_idx_list = new LinkedList<>();
for(int i=0; i<road.length(); i++) {
char zero_chk = road.charAt(i);
if(zero_chk == '0') {
if(lock <n) {
sb.replace(i, i+1, "1");
zero_idx_list.add(i);
lock++;//와 씨 락을 걸어줬으면서 어떻게 lock을 ++을 안해줘....
}
else {//lock을 옮겨준다
int zero_first_idx = zero_idx_list.removeFirst();
sb.replace(zero_first_idx, zero_first_idx+1, "0");
sb.replace(i, i+1, "1");
zero_idx_list.add(i);
}
}//if
//다 옮겨주고 나와서 연속 1의 개수 확인
String sr = sb.toString();
String res[] = sr.split("0");
for(int j=0; j<res.length; j++) {
answer = Math.max(answer, res[j].length());
}
}//for
return answer;
}
public static void main(String[] args) {
String s = "111011110011111011111100011111";
// String s = "001100";
System.out.println(solution(s,3));
}
}
후기 (30min)
왜 무조건 permutation으로만 풀려고 했을까..
어차피 연속으로 1이 있는 가장 큰 값을 찾는 것이기 때문에, 0이 떨어져있는 경우는 max에 도달하지 못하고
0이 연속으로 n번 붙어있어야 하기때문에, Sliding으로 풀 수 있다.
허어… 아쉽다 그래도 최대값이 뭔지 알고, 최대값을 가질 수 있는 기준이 뭔지 파악만 잘 한다면 이렇게 풀 수 있다는 것도 알아낼 수 있다! (테케는 돌았으나, 물론 정답인지는 모르지만…ㅎ)