Jieunny์˜ ๋ธ”๋กœ๊ทธ

[JS] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์‹คํŒจ์œจ ๋ณธ๋ฌธ

Study/Coding Test

[JS] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์‹คํŒจ์œจ

Jieunny 2023. 1. 27. 10:26

๐Ÿ“Œ ๋ฌธ์ œ

์Šˆํผ ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์ž ์˜ค๋ ๋ฆฌ๋Š” ํฐ ๊ณ ๋ฏผ์— ๋น ์กŒ๋‹ค. ๊ทธ๋…€๊ฐ€ ๋งŒ๋“  ํ”„๋žœ์ฆˆ ์˜ค์ฒœ์„ฑ์ด ๋Œ€์„ฑ๊ณต์„ ๊ฑฐ๋’€์ง€๋งŒ, ์š”์ฆ˜ ์‹ ๊ทœ ์‚ฌ์šฉ์ž์˜ ์ˆ˜๊ฐ€ ๊ธ‰๊ฐํ•œ ๊ฒƒ์ด๋‹ค. ์›์ธ์€ ์‹ ๊ทœ ์‚ฌ์šฉ์ž์™€ ๊ธฐ์กด ์‚ฌ์šฉ์ž ์‚ฌ์ด์— ์Šคํ…Œ์ด์ง€ ์ฐจ์ด๊ฐ€ ๋„ˆ๋ฌด ํฐ ๊ฒƒ์ด ๋ฌธ์ œ์˜€๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ• ๊นŒ ๊ณ ๋ฏผ ํ•œ ๊ทธ๋…€๋Š” ๋™์ ์œผ๋กœ ๊ฒŒ์ž„ ์‹œ๊ฐ„์„ ๋Š˜๋ ค์„œ ๋‚œ์ด๋„๋ฅผ ์กฐ์ ˆํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์—ญ์‹œ ์Šˆํผ ๊ฐœ๋ฐœ์ž๋ผ ๋Œ€๋ถ€๋ถ„์˜ ๋กœ์ง์€ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ–ˆ์ง€๋งŒ, ์‹คํŒจ์œจ์„ ๊ตฌํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ์œ„๊ธฐ์— ๋น ์ง€๊ณ  ๋ง์•˜๋‹ค. ์˜ค๋ ๋ฆฌ๋ฅผ ์œ„ํ•ด ์‹คํŒจ์œจ์„ ๊ตฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์™„์„ฑํ•˜๋ผ.

  • ์‹คํŒจ์œจ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ํ•œ๋‹ค.
    • ์Šคํ…Œ์ด์ง€์— ๋„๋‹ฌํ–ˆ์œผ๋‚˜ ์•„์ง ํด๋ฆฌ์–ดํ•˜์ง€ ๋ชปํ•œ ํ”Œ๋ ˆ์ด์–ด์˜ ์ˆ˜ / ์Šคํ…Œ์ด์ง€์— ๋„๋‹ฌํ•œ ํ”Œ๋ ˆ์ด์–ด ์ˆ˜

์ „์ฒด ์Šคํ…Œ์ด์ง€์˜ ๊ฐœ์ˆ˜ N, ๊ฒŒ์ž„์„ ์ด์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ˜„์žฌ ๋ฉˆ์ถฐ์žˆ๋Š” ์Šคํ…Œ์ด์ง€์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด stages๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์‹คํŒจ์œจ์ด ๋†’์€ ์Šคํ…Œ์ด์ง€๋ถ€ํ„ฐ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์Šคํ…Œ์ด์ง€์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š” ๋ฐฐ์—ด์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜๋ผ.

 

๐Ÿ’ก ์•„์ด๋””์–ด

์‹คํŒจ์œจ = ์Šคํ…Œ์ด์ง€์— ๋„๋‹ฌํ–ˆ์œผ๋‚˜ ์•„์ง ํด๋ฆฌ์–ดํ•˜์ง€ ๋ชปํ•œ ํ”Œ๋ ˆ์ด์–ด์˜ ์ˆ˜ / ์Šคํ…Œ์ด์ง€์— ๋„๋‹ฌํ•œ ํ”Œ๋ ˆ์ด์–ด ์ˆ˜
์ „์ฒด ์Šคํ…Œ์ด์ง€ ๊ฐœ์ˆ˜ N
๊ฒŒ์ž„ ์ด์šฉ์ž๊ฐ€ ๋ฉˆ์ถฐ์žˆ๋Š” ์Šคํ…Œ์ด์ง€ ๋ฒˆํ˜ธ ๋ฐฐ์—ด stages
์‹คํŒจ์œจ์ด ๋†’์€ ์Šคํ…Œ์ด์ง€๋ถ€ํ„ฐ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ 

stages์— ์žˆ๋Š” ์Šคํ…Œ์ด์ฆˆ ๋ฒˆํ˜ธ๋Š” ์ด์ „์— ํ†ต๊ณผํ•œ ์Šคํ…Œ์ด์ง€๋„ ํฌํ•จํ•˜๊ณ  ์žˆ์Œ.
1๋ฒˆ ์Šคํ…Œ์ด์ง€ ์‹คํŒจ์œจ => ๋ฐฐ์—ด ์ˆซ์ž๊ฐ€ 1์ธ ์‚ฌ๋žŒ / ๋ฐฐ์—ด ์ˆซ์ž๊ฐ€ 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ์‚ฌ๋žŒ
2๋ฒˆ ์Šคํ…Œ์ด์ง€ ์‹คํŒจ์œจ => ๋ฐฐ์—ด ์ˆซ์ž๊ฐ€ 2์ธ ์‚ฌ๋žŒ / ๋ฐฐ์—ด ์ˆซ์ž๊ฐ€ 2๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ์‚ฌ๋žŒ
๋ฐ›์€ ๋ฐฐ์—ด ์ค‘์—์„œ ์ œ์ผ ํฐ ์Šคํ…Œ์ด์ง€๊ฐ€ ๋ช‡ ๋ฒˆ ์ธ์ง€ ๊ตฌํ•˜๊ณ , ๊ทธ๋งŒํผ for๋ฌธ ๋Œ๋ฆฌ๊ธฐ
๋ฐฐ์—ด ์ธ๋ฑ์Šค๋ฅผ ์Šคํ…Œ์ด์ง€ ๋ฒˆํ˜ธ๋ผ๊ณ  ํ•˜๊ณ , ๊ทธ ์Šคํ…Œ์ด์ง€์— ๋จธ๋ฌผ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ ๋ฐฐ์—ด / ํ†ต๊ณผํ•œ ์‚ฌ๋žŒ ๋ฐฐ์—ด ๋ช‡๋ช…์ธ์ง€ ๋งŒ๋“ค๊ธฐ

 

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

function solution(N, stages) {
  var answer = [];

  let maxStages = Math.max(...stages); 
  
  if(maxStages === (N + 1)){
    maxStages = N;
  }
  
  let stayStage = new Array(maxStages + 1); // ํ•ด๋‹น ์Šคํ…Œ์ด์ง€์— ๋จธ๋ฌผ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ ์ˆ˜
  let passStage = new Array(maxStages + 1); // ๊ทธ ์Šคํ…Œ์ด์ง€๋ฅผ ํ†ต๊ณผํ•œ ์‚ฌ๋žŒ ์ˆ˜
  stayStage.fill(0);
  passStage.fill(0);

  let failPercentage = [];

  for(let i=0; i<stages.length; i++){
    if(stages[i] === N + 1){
      continue;
    }
    else{
      stayStage[stages[i]]++;
    }
  }

  for(let i=0; i<stages.length; i++){
    for(let j=0; j<=maxStages; j++){
      if(stages[i] === maxStages){
      }
      if(stages[i] >= j){
        passStage[j]++;
      }
    }
  }

  for(let i=0; i<stayStage.length; i++){
    failPercentage.push(stayStage[i] / passStage[i]);
  }

  failPercentage.shift();	// ์Šคํ…Œ์ด์ง€์— 0 ์—†์œผ๋ฏ€๋กœ 0 ์ธ๋ฑ์Šค ๋นผ์ฃผ๊ธฐ

  let indexArr = [];
  for(let i=0; i<failPercentage.length; i++){
    indexArr.push(i + 1);
  }

  for(let i=0; i<failPercentage.length-1; i++){
    let temp = 0;
    let idxTemp = 0;
    for(let j=i+1; j<failPercentage.length; j++){
      if(failPercentage[i] < failPercentage[j]){
        temp = failPercentage[i];
        failPercentage[i] = failPercentage[j];
        failPercentage[j] = temp;

        idxTemp = indexArr[i];
        indexArr[i] = indexArr[j];
        indexArr[j] = idxTemp;
      }
      else if(failPercentage[i] === failPercentage[j]){
        if(indexArr[i] > indexArr[j]){
          idxTemp = indexArr[i];
          indexArr[i] = indexArr[j];
          indexArr[j] = idxTemp;
        }
      }
    }
  }
  return indexArr;
}

โžฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค 27๊ฐœ ์ค‘์— 16๊ฐœ ํ†ต๊ณผ..ใ…Ž

 

โœ๏ธ  ๋‹ค์‹œ ํ‘ผ ํ’€์ด

function solution(N, stages) {
  var answer = [];
  let stay = 0;
  let pass = 0;
  let failRate = 0;
  let failArr = [[]];

  for(let i=1; i<N+1; i++){ // ์Šคํ…Œ์ด์ง€ ๋ฒˆํ˜ธ ๋„๋Š” for๋ฌธ
    for(let j=0; j<stages.length; j++){ // ์ฃผ์–ด์ง„ stages ๋ฐฐ์—ด ๋„๋Š” for๋ฌธ
      if(stages[j] === i){  // ๋‘˜์ด ๊ฐ™์œผ๋ฉด ๋จธ๋ฌผ๊ณ  ์žˆ๋Š” ๊ฑฐ๋‹ˆ๊นŒ
        stay++;
      }

      if(stages[j] >= i){ // stages๋ฐฐ์—ด์ด ๊ฐ™๊ฑฐ๋‚˜ ํฌ๋ฉด ๊ทธ ์Šคํ…Œ์ด์ง€๋Š” pass ํ–ˆ๊ฑฐ๋‚˜ ๋„๋‹ฌํ•œ ๊ฑฐ๋‹ˆ๊นŒ
        pass++;
      }
    }

    failRate = stay / pass; 
    failArr.push([i, failRate]);  // ์Šคํ…Œ์ด์ง€ ๋ฒˆํ˜ธ ์ •๋ ฌ์— ํ•„์š”ํ•˜๋‹ˆ๊นŒ ๊ฐ€์ ธ์˜ค๊ธฐ
    
    stay = 0; // ์Šคํ…Œ์ด์ง€ ๋ฒˆํ˜ธ๋งˆ๋‹ค ์ดˆ๊ธฐํ™” ํ•ด์ค˜์•ผํ•จ.
    pass = 0;
  }

  failArr.shift();
 
  failArr.sort(function(a, b){
    return b[1] - a[1];
  });

  for(let i=0; i<failArr.length; i++){
    answer.push(failArr[i][0]);
  }

  return answer;
}

โžฐ ์—ฌ๊ธฐ์ €๊ธฐ ์ฐพ์•„๋ณด๊ณ  ์•„์ด๋””์–ด๋Š” ๊ฐ™์€๋ฐ ๋ฐฐ์—ด์— ์•ˆ๋„ฃ๊ณ  ํ•˜๋Š” ๋ถ„์„ ๋ด์„œ ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ๋‹ค์‹œ ๊ตฌํ˜„ํ•ด๋ดค๋”๋‹ˆ ์ž˜ ๋ฌ๋‹ค....