roqkf

์Šคํ„ฐ๋”” ๊ธฐ๋ก 20 ๋ณธ๋ฌธ

๐Ÿ’ป Development/Study

์Šคํ„ฐ๋”” ๊ธฐ๋ก 20

ahyeon7 2022. 12. 27. 22:47

๋ฌธ์ œ ๋ชฉ๋ก

โค๏ธ‍๐Ÿ”ฅ ์ง์ง€์–ด ์ œ๊ฑฐํ•˜๊ธฐ

function solution(s) {
  let word = [];

  // ์Šคํƒ์œผ๋กœ ๋„ฃ์–ด์„œ ๋งˆ์ง€๋ง‰๊ณผ ๋งˆ์ง€๋ง‰+1๊ฐ€ ๊ฐ™์œผ๋ฉด ๋นผ์ฃผ๊ธฐ
  // ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‹ด์•„๋’€๋˜ word์— ์•„๋ฌด๊ฒƒ๋„ ์—†์œผ๋ฉด, ์ง์ง€์–ด ์ œ๊ฑฐํ•˜๊ธฐ๊ฐ€ ์„ฑ๊ณต๋œ ๊ฒƒ์ด๋ฏ€๋กœ 1๋ฆฌํ„ด
  for (let i = 0; i < s.length; i++) {
    word.push(s[i]);

    if (word.length >= 2 && word.at(-1) === word.at(-2)) {
      word.pop();
      word.pop();
    }
  }
  return !word.length ? 1 : 0;
}

solution('baabaa');

์Šคํƒ์„ ์ด์šฉํ•ด์„œ ํ’€์—ˆ๋‹ค! ์Šคํƒํ•˜๋ฉด ์˜ˆ์ „์— ํ–ˆ์—ˆ๋˜ ํ–„๋ฒ„๊ฑฐ ๋งŒ๋“ค๊ธฐ๋ฐ–์— ์ƒ๊ฐ์ด ์•ˆ๋‚˜..

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

    for(let i = 0; i<s.length; i++){
        if(stack[stack.length-1] != s[i]){
            stack.push(s[i]);
        }
        else{
            stack.pop();
        }       
    }
    if(stack.length>0) return 0;
    else return 1;
}

๋™์›๋‹˜ ์ฝ”๋“œ! ๋‹ค๋ฅธ ๋ถ€๋ถ„๋“ค์€ ๊ฑฐ์˜ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋‚˜๋Š” ์• ์ดˆ์— ๋„ฃ์–ด์ฃผ๊ณ  ํ–ˆ์—ˆ๋Š”๋ฐ ๋™์›๋‹˜์€ ์ง€๊ธˆ ๋„ฃ์„ ๊ฐ’ํ•˜๊ณ  ๋งˆ์ง€๋ง‰ ๊ฐ™์ด ๊ฐ™์€์ง€ ํ™•์ธํ•ด ์ฃผ์—ˆ๋‹ค ์ด๋ ‡๊ฒŒ ํ•ด ์ค€๊ฒŒ ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•˜๊ณ  ์ข‹์•„ ๋ณด์—ฌ์„œ ๊ฐ€์ ธ์™”๋‹ค!

โค๏ธ‍๐Ÿ”ฅ ์˜์–ด ๋๋ง์ž‡๊ธฐ

โŒ ์‹คํŒจ ์ฝ”๋“œ

function solution(n, words) {
  //? ์•ž์— ๋งํ•œ ๋‹จ์–ด์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋‹จ์–ด ๋งํ•˜๊ธฐ
  //! ๊ฐ€์žฅ ๋จผ์ € ํƒˆ๋ฝํ•˜๋Š” ์‚ฌ๋žŒ ๋ฒˆํ˜ธ, ๋ช‡ ๋ฒˆ์งธ ์ฐจ๋ก€์ธ์ง€
  // ์ง€๊ธˆ๊นŒ์ง€ ๋งํ•œ ๋‹จ์–ด๋Š” connectGame push ์‹œ์ผœ ์ค˜์„œ ํ˜„์žฌ ๋‹จ์–ด๊ฐ€ connectGame์— ์žˆ๋‹ค๋ฉด ํƒˆ๋ฝ
  //
  let connectGame = [words[0]];
  let turn = 0;
  for (let i = 0; i < words.length; i++) {
    //? ์ฒซ๋ฒˆ์งธ๋Š” ๋ฐ”๋กœ ํ†ต๊ณผ
    if (i === 0) continue;

    const before = words[i - 1];
    const now = words[i];

    //? ์ „์— ๋งํ•œ ๋‹จ์–ด ์‚ฌ์šฉํ•˜๋ฉด ํƒˆ๋ฝ
    if (connectGame.includes(now)) {
      break;
    }

    //! ํ˜„์žฌ ๋‹จ์–ด์˜ ์ฒซ๊ธ€์ž๊ฐ€ ์ „ ๊ธ€์ž์˜ ๋งˆ์ง€๋ง‰ ๊ธ€์ž์™€ ๊ฐ™์€์ง€ ๋น„๊ต
    if (now.at(0) === before.at(-1)) {
      turn++;
      connectGame.push(words[i - 1]);
      connectGame.push(words[i]);
    }
  }

  //? [ํƒˆ๋ฝ ๋ฒˆํ˜ธ, ๋ช‡ ๋ฒˆ์งธ ์ฐจ๋ก€]
  //? ๊ฒŒ์ž„ turn์ด words์˜ ๊ธธ์ด๋งŒํผ ๋Œ์•„๊ฐ”๋‹ค๋ฉด ํƒˆ๋ฝ์ž๊ฐ€ ์—†๋Š” ๊ฒƒ์ด๋ฏ€๋กœ [0, 0]
  if (turn + 1 === words.length) return [0, 0];
  return (turn + 2) % n === 0
    ? [n, Math.ceil(turn / n)]
    : [(turn + 2) % n, Math.ceil(turn / n)];
}

์‹คํŒจํ–ˆ๋˜ ์ฝ”๋“œ ์‹œ๊ฐ„์ดˆ๊ณผ๋„ ์•„๋‹ˆ๊ณ  ๊ทธ๋ƒฅ ์‹คํŒจ์ด๋‹ค... ์‚ฌ์œ ๋Š” ๋ชจ๋ฅด๊ฒ ๋‹ค ์ผ๋‹จ ์„ฑ๊ณต์ฝ”๋“œ ๋จผ์ € ๋ณด์ž!

โญ• ์„ฑ๊ณต ์ฝ”๋“œ

function solution(n, words) {
  //? ์•ž์— ๋งํ•œ ๋‹จ์–ด์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋‹จ์–ด ๋งํ•˜๊ธฐ
  //! ๊ฐ€์žฅ ๋จผ์ € ํƒˆ๋ฝํ•˜๋Š” ์‚ฌ๋žŒ ๋ฒˆํ˜ธ, ๋ช‡ ๋ฒˆ์งธ ์ฐจ๋ก€์ธ์ง€
  // ์ง€๊ธˆ๊นŒ์ง€ ๋งํ•œ ๋‹จ์–ด๋Š” connectGame push ์‹œ์ผœ ์ค˜์„œ ํ˜„์žฌ ๋‹จ์–ด๊ฐ€ connectGame์— ์žˆ๋‹ค๋ฉด ํƒˆ๋ฝ
  //
  let connectGame = [words[0]];
  console.log(connectGame);
  //? ์ฒซ๋ฒˆ์งธ๋Š” ๋ฐ”๋กœ ํ†ต๊ณผ
  for (let i = 1; i < words.length; i++) {
    const before = words[i - 1];
    const current = words[i];

    //! ํ˜„์žฌ ๋‹จ์–ด์˜ ์ฒซ๊ธ€์ž๊ฐ€ ์ „ ๊ธ€์ž์˜ ๋งˆ์ง€๋ง‰ ๊ธ€์ž์™€ ๊ฐ™์€์ง€ ๋น„๊ต
    if (
      current.at(0) === before.at(-1) &&
      connectGame.indexOf(current) === -1
    ) {
      connectGame.push(current);
    } else {
      //? [ํƒˆ๋ฝ ๋ฒˆํ˜ธ, ๋ช‡ ๋ฒˆ์งธ ์ฐจ๋ก€]
      return [(i % n) + 1, parseInt(i / n) + 1];
    }
  }
  //? ํƒˆ๋ฝ์ž๊ฐ€ ์—†์œผ๋ฉด [0, 0]
  return [0, 0];
}

์‹คํŒจ์ฝ”๋“œ๋ž‘ ๋‹ค๋ฅธ ์ ์ด ์žˆ๋‹ค๋ฉด ๊ฐ€์žฅ ํฐ ๊ฑด ์ด๋ฏธ ๋งํ–ˆ๋˜ ๋‹จ์–ด๋ผ๋ฉด ํƒˆ๋ฝ์‹œํ‚ค๋Š” ๋ถ€๋ถ„์ด ๋‹ค๋ฅด๋‹ค. ์„ฑ๊ณต ์ฝ”๋“œ์—์„œ๋Š” indexOf๋ฅผ ํ†ตํ•ด์„œ ํ•ด๋‹น ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์˜€๊ณ , ์‹คํŒจ ์ฝ”๋“œ์—์„œ๋Š” includes๋กœ ํ–ˆ๋‹ค๋Š” ์ ์ด๋‹ค... ์•„๋‹ˆ๋ฉด ๋‚ด๊ฐ€ ๋ฆฌํ„ด ์‹œํ‚ค๋Š” ๊ณณ์—์„œ ์ž˜๋ชปํ•ด ์ฃผ์—ˆ์„๊นŒ?,,, ๋‚˜์ค‘์— ์ฒ˜์Œ๋ถ€ํ„ฐ ๋œฏ์–ด๋ณด๊ณ  ๋‹ค์‹œ ํ’€์–ด์•ผ๊ฒ ๋‹ค.

/**
1. ์ด์ „์— ๋‚˜์˜จ ๋‹จ์–ด๊ฐ€ ๋‹ค์‹œ ๋‚˜์˜ค๋Š”์ง€
2. ์ง์ „์— ๋‚˜์˜จ ๋‹จ์–ด์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž(character)๊ฐ€ ์ด๋ฒˆ์— ๋ณด๊ณ  ์žˆ๋Š” ๋‹จ์–ด์˜ ์ฒซ๋ฒˆ์งธ ๋ฌธ์ž์™€ ๋™์ผํ•œ์ง€
 */
function solution(n, words) {
    let answer = [0,0];
    let last = words[0][words[0].length-1];
    let hs = new Set();

    hs.add(words[0]);
    console.log(hs)

    for (let i = 1; i < words.length; i++) {
        if (words[i][0] != last || hs.has(words[i])) { // hs๋ฐฐ์—ด์— word[i]๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š”์ง€

            answer[0] = i%n+1;
            answer[1] = parseInt(i/n)+1; 
            console.log(answer[0])
            console.log(answer[1])
            break;
        }
        last = words[i][words[i].length-1];//๋งˆ์ง€๋ง‰ ๊ธ€์ž ๊ฐ€์ ธ์˜ค๊ธฐ
        hs.add(words[i]);                   //hs๋ฐฐ์—ด์— ๋‹จ์–ด ์ถ”๊ฐ€ํ•˜๊ธฐ
    }
    return answer;
}
solution(3,["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"]);

๋™์›๋‹˜ ์ฝ”๋“œ! set์—์„œ ์ถ”๊ฐ€ํ•˜๊ณ  has๋กœ ํ•ด๋‹น ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค! Set์€ ํ•ญ์ƒ ์ค‘๋ณต ์—†์• ๋Š” ์šฉ๋„๋กœ๋งŒ ์‚ฌ์šฉํ–ˆ์—ˆ๋Š”๋ฐ ์ƒˆ๋กœ์šด ์ฝ”๋“œ,, ๊ตฟ๊ตฟ

โค๏ธ‍๐Ÿ”ฅ ๊ตฌ๋ช…๋ณดํŠธ

โŒ ์‹คํŒจ์ฝ”๋“œ

function solution(people, limit) {
  // ๊ฐ€๋ฒผ์šด ์‚ฌ๋žŒ, ๋ฌด๊ฑฐ์šด ์‚ฌ๋žŒ ์ •๋ ฌ ํ›„
  // ์ œ์ผ ๋ฌด๊ฑฐ์šด ์‚ฌ๋žŒ + ์ œ์ผ ๊ฐ€๋ฒผ์šด ์‚ฌ๋žŒ ๋„ฃ์–ด์ง€๋ฉด shift! ํ•ด์ฃผ๊ธฐ
  let light = [...people].sort((a, b) => a - b);
  let heavy = [...people].sort((a, b) => b - a);

  let boat = 0;

  for (let i = 0; i < heavy.length; i++) {
    // ๋ฌด๊ฑฐ์šด ์‚ฌ๋žŒ, ๊ฐ€๋ฒผ์šด ์‚ฌ๋žŒ ๋˜๋ฉด boat++ ํ•ด ์ฃผ๊ณ  ์‚ฌ๋žŒ๋“ค์ด ๋ณดํŠธ๋ฅผ ํƒ”์œผ๋‹ˆ ๋นผ์ค€๋‹ค
    // ๋นผ์คฌ์œผ๋‹ˆ ๋‹ค์‹œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋น„๊ตํ•ด์•ผ ๋˜๋ฏ€๋กœ i--
    if (heavy[i] + light[i] <= limit) {
      heavy.shift();
      heavy.pop();
      light.shift();
      light.pop();
      boat++;
      i--;
    } else {
      heavy.shift();
      light.pop();
      boat++;
      i--;
    }
  }

  return boat;
}

solution([70, 80, 50], 100);

for๋ฌธ ์•ˆ์—์„œ shift(), pop()์„ ์จ์ค˜์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๋กœ ์‹คํŒจํ•œ ์ฝ”๋“œ์ด๋‹ค. ๋™์›๋‹˜๊ป˜์„œ ์Šคํ„ฐ๋””๊ฐ€ ๋๋‚˜๊ณ  ๊ณต์œ ํ•ด ์ฃผ์‹  ๋ธ”๋กœ๊ทธ๋ฅผ ํ†ตํ•ด์„œ ๋ฐฐ์—ด ๋‚ด์—์„œ์˜ ๋ฉ”์„œ๋“œ๋“ค์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„์— ๋Œ€ํ•ด์„œ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค. shift์˜ ๊ฒฝ์šฐ์—๋Š” ์•ž์˜ ๊ฐ’์„ ์ œ๊ฑฐํ•˜๊ณ  ๋‚˜๋จธ์ง€ ์ธ๋ฑ์Šค๋“ค์ด 1๋งŒํผ ์•ž์œผ๋กœ ์™€์•ผ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ์ธ๋ฑ์Šค๊ฐ€ ๋ผ ์ „์ฒด ์ธ๋ฑ์Šค๊ฐ€ ๋ฐ”๋€Œ๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(N)์ด๋‹ค!

push, pop : O(1)
shift, unshift : O(N)

์ฐธ๊ณ : [์‹œ๊ฐ„๋ณต์žก๋„](์ฐธ๊ณ : https://parkparkpark.tistory.com/m/101)

โญ• ์„ฑ๊ณต ์ฝ”๋“œ

function solution(people, limit) {
  // ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ ํ›„
  // ์ œ์ผ ๋ฌด๊ฑฐ์šด ์‚ฌ๋žŒ + ์ œ์ผ ๊ฐ€๋ฒผ์šด ์‚ฌ๋žŒ ๋„ฃ์–ด์ง€๋ฉด boat++ ํ•ด์ฃผ๊ธฐ
  let heavy = [...people].sort((a, b) => b - a);
  let boat = 0;

  console.log(heavy);
  // ํˆฌํฌ์ธํ„ฐ๋กœ ํ’€๊ธฐ
  //  [80, 70, 50, 50]
  //!  i           j
  //?      i   j       i + j๊ฐ€ limit๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์„ ๊ฒฝ์šฐ, j-- ํ•ด์„œ ํฌ์ธํ„ฐ ์ด๋™
  for (let i = 0, j = heavy.length - 1; i <= j; i++) {
    if (heavy[i] + heavy[j] <= limit) {
      j--;
    }
    boat++;
  }
  console.log(boat);
  return boat;
}

solution([70, 50, 80, 50], 100);

for๋ฌธ ๋‚ด์—์„œ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์„ ๋‘ ๋ฒˆ ํ•˜์—ฌ ํˆฌํฌ์ธํ„ฐ ๊ฐœ๋…์œผ๋กœ ํ’€์—ˆ๋‹ค! ์œ„์— ์‹คํŒจ์ฝ”๋“œ์—์„œ๋Š” ์ง๊ด€์ ์ด๊ฒŒ ํ’€์—ˆ์ง€๋งŒ,,, ์‹œ๊ฐ„์ดˆ๊ณผ๋กœ ์•„์‰ฝ์ง€๋งŒ ํˆฌํฌ์ธํ„ฐ๋ฅผ ํ•ด์„œ ํ’€์–ด๋ณธ ๊ฑด ์ด๋ฒˆ์ด ์ฒ˜์Œ์ด๋ผ ์ข‹์•˜๋”ฐ ใ…Žใ…Žใ…Ž!!

 

'๐Ÿ’ป Development > Study' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์Šคํ„ฐ๋”” ๊ธฐ๋ก 22  (0) 2023.01.09
์Šคํ„ฐ๋”” ๊ธฐ๋ก 21  (0) 2023.01.09
์Šคํ„ฐ๋”” ๊ธฐ๋ก 18  (0) 2022.12.19
์Šคํ„ฐ๋”” ๊ธฐ๋ก 17  (0) 2022.12.16
์Šคํ„ฐ๋”” ๊ธฐ๋ก 15  (0) 2022.12.11