๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm

[Algorithm] 110 ์˜ฎ๊ธฐ๊ธฐ

๐Ÿ“‹ ๋ฌธ์ œ

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

 

์ž…์ถœ๋ ฅ ์˜ˆ

["1110","100111100","0111111010"] ["1101","100110110","0110110111"]

 

โœ๏ธ ํ’€์ด

๋จผ์ € '110'์„ ๋ชจ๋‘ ์ฐพ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ์ฐพ์€ '110'์„ ์ ์ ˆํ•œ ์œ„์น˜์— ๋ฐฐ์น˜ํ•จ์œผ๋กœ์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค. ์ฃผ์˜ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์€ '110'์„ ์ฐพ์„ ๋•Œ ์ฐพ์€ '110'์„ ์ œ๊ฑฐํ•˜๊ณ  ๋‹ค์‹œ ์‚ดํŽด๋ด์•ผํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ์‹œ์— ์žˆ๋Š” '0111111010'์„ ๋ณด๋ฉด '110'์€ ํ•œ๋ฒˆ ๋“ฑ์žฅํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ฐพ์€ '110'์„ ์ œ๊ฑฐํ•ด๋ณด๋ฉด '0111110'์œผ๋กœ ์ œ์ผ ๋งˆ์ง€๋ง‰์— '110'์ด ๋˜ ๋“ฑ์žฅํ•œ๋‹ค.

 

์ด๋ ‡๊ฒŒ ์ฐพ์€ '110'๋“ค์€ '110'์„ ์ œ๊ฑฐํ•œ ๋ฌธ์ž์—ด์—์„œ ์ œ์ผ ๋งˆ์ง€๋ง‰์— ๋“ฑ์žฅํ•˜๋Š” 0๋’ค์— ๋ถ™์—ฌ์ค˜์•ผ ํ•œ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ๋’ค์— '1'๋งŒ ๋“ฑ์žฅํ•˜๋ฏ€๋กœ '110'์ด ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„๋‹ค.
  • '1'๊ณผ '0'์„ ์กฐํ•ฉํ•˜์—ฌ ์„ธ์ž๋ฆฌ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค๋ฉด '000', '001', '010', '011', '100', '101', '110', '111'๋กœ '110'์€ 0์ด ๋“ค์–ด๊ฐ€๋Š” ๋ฌธ์ž์—ด ์ค‘ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„๋‹ค. 

์ด๋Ÿฐ ์ ‘๊ทผ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค.

 

๊ฐ€์žฅ ๋จผ์ € ์‹œ๋„ํ•œ ๋ฐฉ๋ฒ•์€ match์™€ replace๋ฅผ ์ด์šฉํ•ด์„œ 110์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์ด์—ˆ๋‹ค. while๋ฌธ์œผ๋กœ ๋Œ๋ฆฌ๋ฉด์„œ str.match(/110/)์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ณ  replace๋กœ ์ œ๊ฑฐํ–ˆ๋‹ค. ์ดํ›„ '110'์ด ์ œ๊ฑฐ๋œ ๋ฌธ์ž์—ด์„ for๋ฌธ์œผ๋กœ ๋’ค์—์„œ ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋ฉฐ 0์ธ ๊ฒฝ์šฐ ์•„๋‹Œ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๋”ํ•ด์คฌ๋‹ค. ํ•˜์ง€๋งŒ match์™€ replace์ด ์ „์ฒด ๋ฌธ์ž์—ด์„ ํƒ์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์ธ์ง€ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.

 

๋‘ ๋ฒˆ์งธ๋กœ๋Š” ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ–ˆ๋‹ค. for๋ฌธ์œผ๋กœ ์•ž์—์„œ๋ถ€ํ„ฐ ๋ฌธ์ž์—ด์„ ํƒ์ƒ‰ํ•˜๋ฉฐ 0์ด ๋“ฑ์žฅํ•œ ๊ฒฝ์šฐ ๋ฐฐ์—ด(arr)์— ๋“ค์–ด๊ฐ„ ์š”์†Œ ์ค‘ ๋งˆ์ง€๋ง‰, ๋งˆ์ง€๋ง‰ - 1 ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ํŒ๋ณ„ํ•˜์—ฌ ๋‘˜๋‹ค 1์ธ ๊ฒฝ์šฐ '110'์ด ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์—์„œ ๋นผ์ฃผ๊ณ  '110'์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋Š” cnt ๋ณ€์ˆ˜๋ฅผ 1 ์ฆ๊ฐ€์‹œ์ผฐ๋‹ค. ์ดํ›„ ๋’ค์—์„œ๋ถ€ํ„ฐ ๋ฐฐ์—ด(arr)์„ ์ˆœํšŒํ•˜๋ฉฐ 0์ด ๋“ฑ์žฅํ•˜๋ฉด '110'์„ cnt๋งŒํผ ๋”ํ•ด์ฃผ๊ณ  ๋ฐฐ์—ด(arr)์˜ ์š”์†Œ๋„ ๋”ํ•ด์คฌ๋‹ค. ๋งŒ์•ฝ ๋ฐฐ์—ด์— ์žˆ๋Š” ์š”์†Œ๋“ค์ด ๋ชจ๋‘ 1์ธ ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•ด cnt๋งŒํผ '110'์ด ๋”ํ•ด์ง€์ง€ ์•Š์•˜๋‹ค๋ฉด ๋งˆ์ง€๋ง‰์— ์ œ์ผ ์•ž์— ๋”ํ•ด์ฃผ๊ณ  ๋งŒ๋“ค์–ด์ง„ '1'๊ณผ '0'์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์„ answer์— ๋„ฃ์–ด์คฌ๋‹ค.

 

โŒจ๏ธ ์ฝ”๋“œ

function solution(s) {
  var answer = [];

  for (let str of s) {
    if (str.length <= 3) {
      answer.push(str);
      continue;
    }

    const arr = [];
    let cnt = 0;
    for (const n of str) {
      let flag = false;
      if (n === '0') {
        if (arr.length >= 2) {
          if (arr[arr.length - 1] === '1' && arr[arr.length - 2] === '1') {
            arr.pop();
            arr.pop();
            cnt += 1;
            flag = true;
          }
        }
      }

      if (!flag) arr.push(n);
    }

    let subStr = '';
    for (let i = arr.length - 1; i >= 0; i--) {
      if (arr[i] === '0' && cnt) {
        subStr = '110'.repeat(cnt) + subStr;
        cnt = 0;
      }
      subStr = arr[i] + subStr;
    }
    if (cnt) subStr = '110'.repeat(cnt) + subStr;

    answer.push(subStr);
  }

  return answer;
}