๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/์ธํ”„๋Ÿฐ(inflearn)

[ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JavaScript) ] section06 - 7 - ๊ต์œก๊ณผ์ • ์„ค๊ณ„

by YWTechIT 2021. 9. 2.
728x90

๐Ÿ“ section06 - 7 - ๊ต์œก๊ณผ์ • ์„ค๊ณ„

ํ˜„์ˆ˜๊ฐ€ ์ง  ์ˆ˜์—… ์„ค๊ณ„๋„๊ฐ€ ์ฃผ์–ด์ง„ ์ˆ˜์—…๊ณ„ํšํ‘œ์™€ ๋งž๋Š”์ง€ ๊ฒ€์ฆํ•˜๋Š” ๋ฌธ์ œ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ queue ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๋ฐ, ํ˜„์ˆ˜์˜ ์ˆ˜์—… ์„ค๊ณ„๋„๋ฅผ ์•ž์—์„œ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ ๋น„๊ตํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ while๋ฌธ ๋ณด๋‹ค๋Š” for๋ฌธ์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”๋ฐ ๋งŒ์•ฝ, ์ˆ˜์—…๊ณ„ํšํ‘œ๊ฐ€ ์ˆ˜์—… ์„ค๊ณ„๋„์— ํ•˜๋‚˜๋„ ํฌํ•จ์ด ๋˜์–ด์žˆ์ง€ ์•Š์œผ๋ฉด while๋ฌธ์ด ๋ฉˆ์ถ”์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ for๋ฌธ์„ ์‚ฌ์šฉํ•ด ์ˆ˜์—…์„ค๊ณ„๋„์— ํ•˜๋‚˜์”ฉ ์ ‘๊ทผํ•˜๋ฉด์„œ ์ˆ˜์—… ๊ณ„ํšํ‘œ๊ฐ€ ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด๋Š” ๋ฐฉ๋ฒ•์ด ๊ดœ์ฐฎ์€ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์ผ ๊ฒƒ์ด๋‹ค. ๋‚˜๋Š” ์ด๋ ‡๊ฒŒ ํ’€์—ˆ๋‹ค.

 

  1. ์ˆ˜์—… ์„ค๊ณ„๋„๋ฅผ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ ๋‹ค.(split)
  2. ์ˆ˜์—… ๊ณ„ํšํ‘œ(target)๋ฅผ ํ•˜๋‚˜์”ฉ ๋Œ๋ฉด์„œ ์ˆ˜์—… ์„ค๊ณ„๋„(s)๋„ ํ•œ ๋ฒˆ์”ฉ ๋ˆ๋‹ค.
  3. ์ˆ˜์—… ์„ค๊ณ„๋„์˜ ๋งจ ์•ž๊ณผ ์ˆ˜์—… ๊ณ„ํšํ‘œ์˜ ๋งจ ์•ž์ด ๋˜‘๊ฐ™์œผ๋ฉด cnt++ํ•˜๊ณ  s[0]๋ฅผ ๊บผ๋‚ธ๋‹ค. ์—ฌ๊ธฐ์„œ s๋Š” ๋ฌธ์ž์—ด์ด๊ธฐ ๋•Œ๋ฌธ์— splice๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ˆ˜์—… ์„ค๊ณ„๋„์˜ ๋งจ ์•ž๊ณผ ์ˆ˜์—… ๊ณ„ํšํ‘œ์˜ ๋งจ ์•ž์ด ๊ฐ™์ง€ ์•Š์œผ๋ฉด ์ œ์ผ ์ˆ˜์—… ์„ค๊ณ„๋„์˜ ๋งจ ์•ž์„ ๋งจ ๋’ค๋กœ ๋ณด๋‚ธ๋‹ค.
  4. ์ˆ˜์—… ๊ณ„ํšํ‘œ(CBA)์˜ length ๋งŒํผ ๋ฐ˜๋ณต

 

์„ ์ƒ๋‹˜์€ ์ด๊ฒƒ๋ณด๋‹ค ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘ธ์…จ๋‹ค.

 

  1. ์ˆ˜์—… ์„ค๊ณ„๋„๋ฅผ for๋ฌธ์œผ๋กœ ํ•œ๋ฐ”ํ€ด ๋ˆ๋‹ค.
  2. ๋งŒ์•ฝ, x๊ฐ€ ์ˆ˜์—… ๊ณ„ํšํ‘œ์— ํฌํ•จ(includes)์ด ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  3. ์ฐธ์ด๋ฉด ๋งŒ์•ฝ, x์™€ queue.shift()๋ฅผ ๋น„๊ตํ•˜๊ณ  ๊ฐ™์ง€ ์•Š์œผ๋ฉด return "NO"๋ฅผ ํ•˜๊ณ , ๊ฐ™์œผ๋ฉด shift()ํ•œ๋‹ค.
  4. ๋งˆ์ง€๋ง‰์— queue์˜ ๊ธธ์ด๋ฅผ ํ™•์ธํ•ด์„œ 0๋ณด๋‹ค ํฌ๋ฉด ์ˆ˜์—… ์„ค๊ณ„๊ฐ€ ์ž˜๋ชป๋œ ๊ฒƒ์ด๋ฏ€๋กœ NO, 0์ด๋ฉด YES๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

728x90

 

// ๋‚˜์˜ ์ฝ”๋“œ
let s = "CBDAGE";
let target = "CBA";

console.log(solution(s, target));

function solution(s, target){
    let cnt = 0;
    s = s.split("");

    for (let x of target){
        for (let y of s){
            if (s[0] === x){
                cnt++;
                s.splice(0, 1);
                break;
            }else s.push(s.shift());
        }
    }
    return cnt === target.length ? "YES" : "NO";
}

 

// ๊ฐ•์˜ ์ฝ”๋“œ
let s = "CBDAGE";
let target = "CBA";

console.log(solution(s, target));

function solution(s, target) {
  let cnt = 0;
  let queue = target.split('');

  for (let x of s){
      console.log(s, x, queue)
      if (queue.includes(x)){
          if (x !== queue.shift()) return "NO";
      }
  }

  return queue.length>0 ? "NO" : "YES";
}
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€