https://programmers.co.kr/learn/courses/30/lessons/77886#
๋ฌธ์
0๊ณผ 1๋ก ์ด๋ฃจ์ด์ง ์ด๋ค ๋ฌธ์์ด x์ ๋ํด์, ๋น์ ์ ๋ค์๊ณผ ๊ฐ์ ํ๋์ ํตํด x๋ฅผ ์ต๋ํ ์ฌ์ ์์ผ๋ก ์์ ์ค๋๋ก ๋ง๋ค๊ณ ์ ํฉ๋๋ค.
- x์ ์๋ "110"์ ๋ฝ์์, ์์์ ์์น์ ๋ค์ ์ฝ์ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, x = "11100" ์ผ ๋, ์ฌ๊ธฐ์ ์ค์์ ์๋ "110"์ ๋ฝ์ผ๋ฉด x = "10" ์ด ๋ฉ๋๋ค. ๋ฝ์๋ "110"์ x์ ๋งจ ์์ ๋ค์ ์ฝ์ ํ๋ฉด x = "11010" ์ด ๋ฉ๋๋ค.
๋ณํ์ํฌ ๋ฌธ์์ด x๊ฐ ์ฌ๋ฌ ๊ฐ ๋ค์ด์๋ ๋ฌธ์์ด ๋ฐฐ์ด s๊ฐ ์ฃผ์ด์ก์ ๋, ๊ฐ ๋ฌธ์์ด์ ๋ํด์ ์์ ํ๋์ผ๋ก ๋ณํํด์ ๋ง๋ค ์ ์๋ ๋ฌธ์์ด ์ค ์ฌ์ ์์ผ๋ก ๊ฐ์ฅ ์์ ์ค๋ ๋ฌธ์์ด์ ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์ฌํญ
- 1 ≤ s์ ๊ธธ์ด ≤ 1,000,000
- 1 ≤ s์ ๊ฐ ์์ ๊ธธ์ด ≤ 1,000,000
- 1 ≤ s์ ๋ชจ๋ ์์์ ๊ธธ์ด์ ํฉ ≤ 1,000,000
์์ ์ ์ถ๋ ฅ
์ ์ถ๋ ฅ ์ #1
- ๋ค์ ๊ทธ๋ฆผ์ "1110"์ "1101"๋ก ๋ง๋๋ ๊ณผ์ ์ ๋ํ๋ธ ๊ฒ์ ๋๋ค.
- "1101"๋ณด๋ค ์ฌ์ ์์ผ๋ก ๋ ์์ ์ค๋ ๋ฌธ์์ด์ ๋ง๋ค ์ ์์ผ๋ฏ๋ก, ๋ฐฐ์ด์ "1101"์ ๋ด์์ผ ํฉ๋๋ค.
- ๋ค์ ๊ทธ๋ฆผ์ "100111100"์ "100110110"์ผ๋ก ๋ง๋๋ ๊ณผ์ ์ ๋ํ๋ธ ๊ฒ์ ๋๋ค.
- "100110110"๋ณด๋ค ์ฌ์ ์์ผ๋ก ๋ ์์ ์ค๋ ๋ฌธ์์ด์ ๋ง๋ค ์ ์์ผ๋ฏ๋ก, ๋ฐฐ์ด์ "100110110"์ ๋ด์์ผ ํฉ๋๋ค.
- ๊ทธ๋ฆผ์ ๋์จ ๋ฐฉ์ ๋ง๊ณ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก "100110110"์ ๋ง๋ค ์ ์์ต๋๋ค.
- ๋ค์ ๊ทธ๋ฆผ์ "0111111010"์ "0110110111"๋ก ๋ง๋๋ ๊ณผ์ ์ ๋ํ๋ธ ๊ฒ์ ๋๋ค.
- "0110110111"๋ณด๋ค ์ฌ์ ์์ผ๋ก ๋ ์์ ์ค๋ ๋ฌธ์์ด์ ๋ง๋ค ์ ์์ผ๋ฏ๋ก, ๋ฐฐ์ด์ "0110110111"์ ๋ด์์ผ ํฉ๋๋ค.
- ๊ทธ๋ฆผ์ ๋์จ ๋ฐฉ์ ๋ง๊ณ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก "0110110111"์ ๋ง๋ค ์ ์์ต๋๋ค.
ํ์ด
stack์ 110์ ์ ์ธํ๊ณ PUSH
stack ๋ด์ ๋ฌธ์๋ค์ Stringbuilder์ ์ ์ฅํ๋ฉด์ ๊ฐ์ฅ ๋ง์ง๋ง 0์ ์์น ์ฐพ๊ธฐ โผ๏ธ
์๋ ๋ฌธ์์ 110 ์ด ์กด์ฌํ์ง ์์์๋ค๋ฉด, ์๋ณธ ๊ทธ๋๋ก ์ ์ฅ
์กด์ฌํ๋ค๋ฉด, ๋ง์ง๋ง 0 ๋ค์ '110'์ ์ฐพ์ ๊ฐฏ์ ๋งํผ ์ถ๊ฐ
์ฝ๋
import java.util.Stack;
public class PR_110์ฎ๊ธฐ๊ธฐ {
public static 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;
for(int j = 0 ; j < str.length() ; j++){
char z = str.charAt(j);
if(stack.size() > 1){
char y = stack.pop();
char x = stack.pop();
if(x == '1' && y == '1' && z == '0')
cnt++;
else{
stack.push(x);
stack.push(y);
stack.push(z);
}
}
else
stack.push(z);
}
int idx = stack.size();
boolean flag = false;
sb = new StringBuilder();
// 0์ ๋ง์ง๋ง ์์น ์ฐพ๊ธฐ
while(!stack.isEmpty()){
if(!flag){
if(stack.peek() == '1')
idx--;
else
flag = true;
}
sb.insert(0, stack.pop());
}
if(cnt > 0){
while(cnt-- > 0){
sb.insert(idx, "110");
idx += 3;
}
answer[i] = sb.toString();
}
else
// 110 ์ด ์๋ค๋ ์๋ฏธ์ด๋ฏ๋ก ๊ทธ๋๋ก
answer[i] = s[i];
}
return answer;
}
public static void main(String[] args) {
String[] s = {"100111100"};
String[] answer = solution(s);
}
}