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

[JS] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋ช…์˜ˆ์˜ ์ „๋‹น(1) ๋ณธ๋ฌธ

Study/Coding Test

[JS] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋ช…์˜ˆ์˜ ์ „๋‹น(1)

Jieunny 2023. 1. 30. 12:55

๐Ÿ“Œ  ๋ฌธ์ œ

"๋ช…์˜ˆ์˜ ์ „๋‹น"์ด๋ผ๋Š” TV ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ๋งค์ผ 1๋ช…์˜ ๊ฐ€์ˆ˜๊ฐ€ ๋…ธ๋ž˜๋ฅผ ๋ถ€๋ฅด๊ณ , ์‹œ์ฒญ์ž๋“ค์˜ ๋ฌธ์ž ํˆฌํ‘œ์ˆ˜๋กœ ๊ฐ€์ˆ˜์—๊ฒŒ ์ ์ˆ˜๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ๋งค์ผ ์ถœ์—ฐํ•œ ๊ฐ€์ˆ˜์˜ ์ ์ˆ˜๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ์ถœ์—ฐ ๊ฐ€์ˆ˜๋“ค์˜ ์ ์ˆ˜ ์ค‘ ์ƒ์œ„ k๋ฒˆ์งธ ์ด๋‚ด์ด๋ฉด ํ•ด๋‹น ๊ฐ€์ˆ˜์˜ ์ ์ˆ˜๋ฅผ ๋ช…์˜ˆ์˜ ์ „๋‹น์ด๋ผ๋Š” ๋ชฉ๋ก์— ์˜ฌ๋ ค ๊ธฐ๋…ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ ์ดํ›„ ์ดˆ๊ธฐ์— k์ผ๊นŒ์ง€๋Š” ๋ชจ๋“  ์ถœ์—ฐ ๊ฐ€์ˆ˜์˜ ์ ์ˆ˜๊ฐ€ ๋ช…์˜ˆ์˜ ์ „๋‹น์— ์˜ค๋ฅด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. k์ผ ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ์ถœ์—ฐ ๊ฐ€์ˆ˜์˜ ์ ์ˆ˜๊ฐ€ ๊ธฐ์กด์˜ ๋ช…์˜ˆ์˜ ์ „๋‹น ๋ชฉ๋ก์˜ k๋ฒˆ์งธ ์ˆœ์œ„์˜ ๊ฐ€์ˆ˜ ์ ์ˆ˜๋ณด๋‹ค ๋” ๋†’์œผ๋ฉด, ์ถœ์—ฐ ๊ฐ€์ˆ˜์˜ ์ ์ˆ˜๊ฐ€ ๋ช…์˜ˆ์˜ ์ „๋‹น์— ์˜ค๋ฅด๊ฒŒ ๋˜๊ณ  ๊ธฐ์กด์˜ k๋ฒˆ์งธ ์ˆœ์œ„์˜ ์ ์ˆ˜๋Š” ๋ช…์˜ˆ์˜ ์ „๋‹น์—์„œ ๋‚ด๋ ค์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ๋งค์ผ "๋ช…์˜ˆ์˜ ์ „๋‹น"์˜ ์ตœํ•˜์œ„ ์ ์ˆ˜๋ฅผ ๋ฐœํ‘œํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, k = 3์ด๊ณ , 7์ผ ๋™์•ˆ ์ง„ํ–‰๋œ ๊ฐ€์ˆ˜์˜ ์ ์ˆ˜๊ฐ€ [10, 100, 20, 150, 1, 100, 200]์ด๋ผ๋ฉด, ๋ช…์˜ˆ์˜ ์ „๋‹น์—์„œ ๋ฐœํ‘œ๋œ ์ ์ˆ˜๋Š” ์•„๋ž˜์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด [10, 10, 10, 20, 20, 100, 100]์ž…๋‹ˆ๋‹ค.

๋ช…์˜ˆ์˜ ์ „๋‹น ๋ชฉ๋ก์˜ ์ ์ˆ˜์˜ ๊ฐœ์ˆ˜ k, 1์ผ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ๋‚ ๊นŒ์ง€ ์ถœ์—ฐํ•œ ๊ฐ€์ˆ˜๋“ค์˜ ์ ์ˆ˜์ธ score๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋งค์ผ ๋ฐœํ‘œ๋œ ๋ช…์˜ˆ์˜ ์ „๋‹น์˜ ์ตœํ•˜์œ„ ์ ์ˆ˜๋ฅผ returnํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

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

k๊นŒ์ง€ ๋Œ๋ฉด์„œ score ์ฐจ๋ ˆ๋Œ€๋กœ rank ๋ฐฐ์—ด์— ๋„ฃ์–ด์ฃผ๊ณ , ๋„ฃ์„ ๋•Œ๋งˆ๋‹ค ์ตœ์†Œ๊ฐ’ answer์— ๋„ฃ์–ด์ค€๋‹ค.

k๋ถ€ํ„ฐ score ๊ธธ์ด๊นŒ์ง€ ๋Œ๋ฉด์„œ ๋“ค์–ด๊ฐˆ ์š”์†Œ๊ฐ€ rank ๋ฐฐ์—ด์˜ ์ตœ์†Œ๊ฐ’๋ณด๋‹ค ํฌ๋‹ค๋ฉด ์ตœ์†Œ๊ฐ’ ๋นผ๊ณ , ๊ทธ ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.

rank๋ฅผ sort ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ฆฌํ•˜๊ณ , ์ตœ์†Œ๊ฐ’์„ answer์— ๋„ฃ์–ด์ฃผ๊ณ  rank์—์„œ๋Š” ๋นผ์ค€๋‹ค.

k๊ฐ€ score์˜ ๊ธธ์ด๋ณด๋‹ค ํด ๊ฒฝ์šฐ๋„ ์ƒ๊ฐํ•ด์ค˜์•ผํ•œ๋‹ค!!

 

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

function solution(k, score) {
  var answer = [];
  let rank = [];


  if(k > score.length){
    for(let i=0; i<score.length; i++){
      rank[i] = score[i];
        rank.sort((a, b) => b - a);
        answer.push(rank[rank.length-1]);
    }
  }
  else {
    for(let i=0; i<k; i++){
        rank[i] = score[i];
        rank.sort((a, b) => b - a);
        answer.push(rank[rank.length-1]);
    }
  }

  for(let i=k; i<score.length; i++){
    rank.sort((a, b) => b - a);

    if(Math.min(...rank) < score[i]){
      rank.pop();
      rank.push(score[i]);
      rank.sort((a, b) => b - a);
      answer.push(rank[rank.length-1]);
    }
    else{
      answer.push(rank[rank.length-1]);
    }
  }

  return answer;
}