[Data Structure] Stack and Queue

link717ยท2020๋…„ 12์›” 13์ผ
0

DataStructure

๋ชฉ๋ก ๋ณด๊ธฐ
1/3
post-thumbnail

๐Ÿค— Stack

๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€์™€ ์‚ญ์ œ๊ฐ€ ํ•œ ์ชฝ ๋ฐฉํ–ฅ์—์„œ ์ผ์–ด๋‚˜๋Š” ๊ตฌ์กฐ

  • ์ธํ„ฐ๋„ท ๋ฐฉ๋ฌธ ๊ธฐ๋ก์„ stack์˜ ์˜ˆ๋กœ ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๋งˆ์ง€๋ง‰ ๋ฐฉ๋ฌธ ์œ„์น˜์—์„œ ๋’ค๋กœ ๊ฐ€๊ธฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋งˆ์ง€๋ง‰ ์œ„์น˜๋ฅผ ์ œ์™ธํ•œ ๊ฐ€์žฅ ์ตœ๊ทผ ๋ฐฉ๋ฌธ ์œ„์น˜๋กœ ์ด๋™ํ•œ๋‹ค.

๐Ÿค— Queue

๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€์™€ ์‚ญ์ œ๊ฐ€ ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์—์„œ ์ผ์–ด๋‚˜๋Š” ๊ตฌ์กฐ

  • ํ”„๋ฆฐํ„ฐ ๋ณต์‚ฌ ์ˆœ์„œ๋ฅผ Queue์˜ ์˜ˆ๋กœ ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๊ฐ€์žฅ ์ฒ˜์Œ ํ”„๋ฆฐํŠธ๋ฅผ ์š”์ฒญํ•œ ์‚ฌ๋žŒ์˜ ๋ฌธ์„œ๊ฐ€ ์ œ์ผ ๋จผ์ € ์ธ์‡„๋œ๋‹ค.

    ์ถœ์ฒ˜: YOUTUBE-EBS ๋งํฌ ์†Œํ”„ํŠธ์›จ์–ด ์„ธ์ƒ, "์Œ“๊ณ  ์ค„ ์„ธ์šฐ๋Š” ๋ฐ์ดํ„ฐ, ์Šคํƒ๊ณผ ํ"

    ๐Ÿค— Programmers Algorithum ๋ฌธ์ œ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํŒ€์—์„œ๋Š” ๊ธฐ๋Šฅ ๊ฐœ์„  ์ž‘์—…์„ ์ˆ˜ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ๊ฐ ๊ธฐ๋Šฅ์€ ์ง„๋„๊ฐ€ 100%์ผ ๋•Œ ์„œ๋น„์Šค์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜, ๊ฐ ๊ธฐ๋Šฅ์˜ ๊ฐœ๋ฐœ์†๋„๋Š” ๋ชจ๋‘ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋’ค์— ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์•ž์— ์žˆ๋Š” ๊ธฐ๋Šฅ๋ณด๋‹ค ๋จผ์ € ๊ฐœ๋ฐœ๋  ์ˆ˜ ์žˆ๊ณ , ์ด๋•Œ ๋’ค์— ์žˆ๋Š” ๊ธฐ๋Šฅ์€ ์•ž์— ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋  ๋•Œ ํ•จ๊ป˜ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.
๋จผ์ € ๋ฐฐํฌ๋˜์–ด์•ผ ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ž‘์—…์˜ ์ง„๋„๊ฐ€ ์ ํžŒ ์ •์ˆ˜ ๋ฐฐ์—ด progresses์™€ ๊ฐ ์ž‘์—…์˜ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ์ ํžŒ ์ •์ˆ˜ ๋ฐฐ์—ด speeds๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ๊ฐ ๋ฐฐํฌ๋งˆ๋‹ค ๋ช‡ ๊ฐœ์˜ ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋˜๋Š”์ง€๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

// ๋‚˜์˜ ๋ฌธ์ œํ’€์ด
function solution(progresses, speeds) {
  let answer = [];
  let days = progresses.map((progress, idx) => Math.ceil((100-progress)/speeds[idx]));
  let count = 0;
  let maxDeployDays = days[0];
  
  for (let j = 0; j < days.length; j++) {
    if (days[j] <= maxDeployDays) {
      count++;
    } else {
      answer.push(count);
      count = 1;
      maxDeployDays = days[j];
    } 
  }
  if (count !== 0) {answer.push(count)};
  return answer;
}

// ์ธ๊ธฐ์žˆ๋Š” ๋ฌธ์ œํ’€์ด
// ๋ณ„๋„๋กœ count๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•  ํ•„์š”์—†์œผ๋‹ˆ answer์— ์ €์žฅ๋˜์ง€ ์•Š์€ count๋ฅผ ์ž…๋ ฅํ•˜๊ธฐ ์œ„ํ•ด if๋ฌธ์„ ์ถ”๊ฐ€๋กœ ์ž‘์„ฑํ•  ํ•„์š”๋„ ์—†๋‹ค.
// ํ•œ๊ฐœ์˜ for๋ฌธ์œผ๋กœ 2๊ฐœ์˜ ๋ณ€์ˆ˜์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. 

function solution(progresses, speeds) {
  let answer = [0];
  let days = progresses.map((progress, index) => Math.ceil((100 - progress) / speeds[index]));
  let maxDay = days[0];

  for(let i = 0, j = 0; i< days.length; i++){
    if(days[i] <= maxDay) {
      answer[j] += 1;
    } else {
      maxDay = days[i];
      answer[++j] = 1;
    }
  }
  return answer;
}
profile
Turtle Never stop

0๊ฐœ์˜ ๋Œ“๊ธ€