[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / Java] - 110 ์˜ฎ๊ธฐ๊ธฐ

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

110 ์˜ฎ๊ธฐ๊ธฐ
์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - 110 ์˜ฎ๊ธฐ๊ธฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
school.programmers.co.kr

๐Ÿ’ก ๋ฌธ์ œ ํŒŒ์•…

  • 0๊ณผ 1๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ด ์—ฌ๋Ÿฌ ๊ฐœ ์ฃผ์–ด์ง„๋‹ค.
  • ๋ฌธ์ž์—ด์—์„œ "110"์„ ๋ฝ‘์•„๋‚ด์–ด ๋‹ค๋ฅธ ์œ„์น˜์— ๊ทธ๋Œ€๋กœ ๋‹ค์‹œ ๋ผ์›Œ ๋„ฃ๋Š” ์ž‘์—…์„ ์›ํ•˜๋Š” ๋งŒํผ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด ์ž‘์—…์„ ๋ฐ˜๋ณตํ•ด์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž์—ด ์ค‘ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ๊ฐ€์žฅ ์•ž์„œ๋Š” ๋ฌธ์ž์—ด์„ ๊ฐ๊ฐ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

๐Ÿ—๏ธ ์ ‘๊ทผ ๋ฐฉ๋ฒ•

  • ์‚ฌ์ „์ˆœ์œผ๋กœ ๊ฐ€์žฅ ์•ž์„œ๊ฒŒ ๋งŒ๋“ค๋ ค๋ฉด, "110"์„ ์ตœ๋Œ€ํ•œ ์•ž์ชฝ์—์„œ ์ œ๊ฑฐํ•˜๊ณ , ๋‚จ์€ ๋ฌธ์ž์—ด์—์„œ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ 0 ๋ฐ”๋กœ ๋’ค์— ๋‹ค์‹œ ์ฑ„์›Œ ๋„ฃ๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•˜๋‹ค.
  • ์Šคํƒ์„ ์ด์šฉํ•ด ๋ฌธ์ž์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ "110" ํŒจํ„ด์ด ๋งŒ๋“ค์–ด์งˆ ๋•Œ๋งˆ๋‹ค ์Šคํƒ์—์„œ ์ œ๊ฑฐํ•˜๊ณ  ์ œ๊ฑฐ ํšŸ์ˆ˜๋ฅผ ์„ผ๋‹ค.
  • ๋ชจ๋“  "110"์„ ์ œ๊ฑฐํ•œ ๋’ค ๋‚จ์€ ๋ฌธ์ž์—ด์—์„œ ๋งˆ์ง€๋ง‰ '0'์˜ ์œ„์น˜๋ฅผ ์ฐพ๋Š”๋‹ค.
    • '0'์ด ์—†๋‹ค๋ฉด ๋ฌธ์ž์—ด์˜ ๋งจ ์•ž์— "110"๋“ค์„ ๋ชจ๋‘ ๋ถ™์ธ๋‹ค.
    • '0'์ด ์žˆ๋‹ค๋ฉด ๊ทธ ์œ„์น˜ ๋ฐ”๋กœ ๋’ค์— "110"๋“ค์„ ๋ชจ๋‘ ๋ผ์›Œ ๋„ฃ๋Š”๋‹ค.

๐Ÿงฉ ์ฝ”๋“œ ๊ตฌํ˜„

class Solution {

    public String[] solution(String[] s) {
        String[] answer = new String[s.length];

        for (int i = 0; i < s.length; i++) {
            StringBuilder stack = new StringBuilder();
            int count = 0;

            for (char c : s[i].toCharArray()) {
                stack.append(c);

                int len = stack.length();

                if (len >= 3 &&
                        stack.charAt(len - 3) == '1' &&
                        stack.charAt(len - 2) == '1' &&
                        stack.charAt(len - 1) == '0') {

                    stack.delete(len - 3, len);
                    count++;
                }
            }

            int idx = stack.lastIndexOf("0");

            StringBuilder result = new StringBuilder();

            if (idx == -1) {
                for (int j = 0; j < count; j++) {
                    result.append("110");
                }
                result.append(stack);
            } else {
                result.append(stack.substring(0, idx + 1));

                for (int j = 0; j < count; j++) {
                    result.append("110");
                }
                result.append(stack.substring(idx + 1));
            }
            answer[i] = result.toString();
        }
        return answer;
    }
}