๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm

[Algorithm] ๋ฒ ์ŠคํŠธ ์•จ๋ฒ”

๐Ÿ“‹ ๋ฌธ์ œ

์ŠคํŠธ๋ฆฌ๋ฐ ์‚ฌ์ดํŠธ์—์„œ ์žฅ๋ฅด ๋ณ„๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์žฌ์ƒ๋œ ๋…ธ๋ž˜๋ฅผ ๋‘ ๊ฐœ์”ฉ ๋ชจ์•„ ๋ฒ ์ŠคํŠธ ์•จ๋ฒ”์„ ์ถœ์‹œํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋ž˜๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ๋กœ ๊ตฌ๋ถ„ํ•˜๋ฉฐ, ๋…ธ๋ž˜๋ฅผ ์ˆ˜๋กํ•˜๋Š” ๊ธฐ์ค€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์†ํ•œ ๋…ธ๋ž˜๊ฐ€ ๋งŽ์ด ์žฌ์ƒ๋œ ์žฅ๋ฅด๋ฅผ ๋จผ์ € ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.
  2. ์žฅ๋ฅด ๋‚ด์—์„œ ๋งŽ์ด ์žฌ์ƒ๋œ ๋…ธ๋ž˜๋ฅผ ๋จผ์ € ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.
  3. ์žฅ๋ฅด ๋‚ด์—์„œ ์žฌ์ƒ ํšŸ์ˆ˜๊ฐ€ ๊ฐ™์€ ๋…ธ๋ž˜ ์ค‘์—์„œ๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ๋…ธ๋ž˜๋ฅผ ๋จผ์ € ์ˆ˜๋กํ•ฉ๋‹ˆ๋‹ค.

๋…ธ๋ž˜์˜ ์žฅ๋ฅด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ๋ฐฐ์—ด genres์™€ ๋…ธ๋ž˜๋ณ„ ์žฌ์ƒ ํšŸ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด plays๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋ฒ ์ŠคํŠธ ์•จ๋ฒ”์— ๋“ค์–ด๊ฐˆ ๋…ธ๋ž˜์˜ ๊ณ ์œ  ๋ฒˆํ˜ธ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

 

์ œํ•œ ์‚ฌํ•ญ

  • genres[i]๋Š” ๊ณ ์œ ๋ฒˆํ˜ธ๊ฐ€ i์ธ ๋…ธ๋ž˜์˜ ์žฅ๋ฅด์ž…๋‹ˆ๋‹ค.
  • plays[i]๋Š” ๊ณ ์œ ๋ฒˆํ˜ธ๊ฐ€ i์ธ ๋…ธ๋ž˜๊ฐ€ ์žฌ์ƒ๋œ ํšŸ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • genres์™€ plays์˜ ๊ธธ์ด๋Š” ๊ฐ™์œผ๋ฉฐ, ์ด๋Š” 1 ์ด์ƒ 10,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ์žฅ๋ฅด ์ข…๋ฅ˜๋Š” 100๊ฐœ ๋ฏธ๋งŒ์ž…๋‹ˆ๋‹ค.
  • ์žฅ๋ฅด์— ์†ํ•œ ๊ณก์ด ํ•˜๋‚˜๋ผ๋ฉด, ํ•˜๋‚˜์˜ ๊ณก๋งŒ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์žฅ๋ฅด๋Š” ์žฌ์ƒ๋œ ํšŸ์ˆ˜๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ

["classic", "pop", "classic", "classic", "pop"] [500, 600, 150, 800, 2500] [4, 1, 3, 0]

 

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

๊ฐ€์žฅ ๋งŽ์ด ์žฌ์ƒ๋œ ์žฅ๋ฅด๋ฅผ ํ™•์ธํ•ด์•ผํ•˜๊ณ , ๊ทธ ์žฅ๋ฅด ๋‚ด์—์„œ๋„ ๊ฐ€์žฅ ๋งŽ์ด ์žฌ์ƒ๋œ ์Œ์•…์˜ ๋ฒˆํ˜ธ๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋Œ๋ฉด์„œ ๊ฐ์ฒด์— ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ์ •๋ ฌํ•ด์ฃผ๋ฉด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

๊ฐ์ฒด์˜ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์žก์•˜๋‹ค.

{
  ์žฅ๋ฅด: { total: ์žฅ๋ฅด์˜ ์ด ์žฌ์ƒํšŸ์ˆ˜, list: [ [์Œ์•…์˜ ๋ฒˆํ˜ธ, ์žฌ์ƒํšŸ์ˆ˜] ...] },
}

์ด ์ •๋ณด๋ฅผ ํ†ตํ•ด ๊ฐ ์žฅ๋ฅด์˜ total์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•ด์ฃผ๊ณ , ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉด์„œ list์˜ ๋‘๋ฒˆ์งธ ๊ฐ’์ธ ์žฌ์ƒํšŸ์ˆ˜๋กœ ๋‹ค์‹œ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ๋’ค ์•ž์—์„œ๋ถ€ํ„ฐ 2๊ฐœ์˜ ์Œ์•…์„ ์„ ํƒํ–ˆ๋‹ค.

 

 

โŒจ๏ธ ์ฝ”๋“œ

function solution(genres, plays) {
  var answer = [];

  const hash = {};

  for (let i = 0; i < genres.length; i++) {
    if (hash[genres[i]]) {
      hash[genres[i]]['total'] += plays[i];
      hash[genres[i]]['list'].push([i, plays[i]]);
    } else {
      hash[genres[i]] = { total: plays[i], list: [[i, plays[i]]] };
    }
  }

  const hashArr = Object.entries(hash).sort((a, b) => b[1]['total'] - a[1]['total']);

  for (const [genre, info] of hashArr) {
    info['list'].sort((a, b) => b[1] - a[1]);

    let cnt = 0;
    for (const [num, play] of info['list']) {
      answer.push(num);
      cnt += 1;
      if (cnt >= 2) break;
    }
  }

  return answer;
}