์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์•Œ๊ณ ๋ฆฌ์ฆ˜

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 43238] ์ž…๊ตญ์‹ฌ์‚ฌ (Javascript) (ํ†ต๊ณผX)

์€์ง„ 2021. 8. 3. 12:58

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป๋ฌธ์ œ๋งํฌ

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 43238] ์ž…๊ตญ์‹ฌ์‚ฌ (Javascript)
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค


โœ๏ธIdea Sketch

2021-07-13

1. ๋ฌธ์ œ ์ดํ•ด

  • ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์˜ ์ตœ์†Ÿ๊ฐ’ (sum)
  • ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ์‚ฌ๋žŒ์€ ๋น„์–ด ์žˆ๋Š” ์‹ฌ์‚ฌ๋Œ€๋กœ ๊ฐ€์„œ ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›์„ ์ˆ˜
  • ๋” ๋นจ๋ฆฌ ๋๋‚˜๋Š” ์‹ฌ์‚ฌ๋Œ€๊ฐ€ ์žˆ์œผ๋ฉด ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์‹ฌ์‚ฌ๋Œ€ ์ด๋™!!!

2. ๋กœ์ง

  • ์‹ฌ์‚ฌ ๋ฐ›๋Š” ๋ฐ์— ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ sum
  • ์‹ฌ์‚ฌ๊ฐ€ ๋” ๋นจ๋ฆฌ ๋๋‚˜๋Š” ๊ณณ์— ๋ฐฐ์ •ํ•ด์ค˜์•ผํ•จ --> ์ •๋ ฌ?!
  • times๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ

3. ๋กœ์ง ์ฐฌ์ฐฌํžˆ ๋œฏ์–ด๋ณด๊ธฐ..

  • 0๋ช…, 0๋ถ„, [7, 10] --> 2๋ช…, 7๋ถ„, [0, 3]
  • ์‹ฌ์‚ฌ๋Œ€ ์‹œ๊ฐ„ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ์‹œ๊ฐ„๋งŒํผ ๋นผ์คŒ ([7, 10] ์ค‘์— 7์ด ๊ฐ€์žฅ ์ž‘์œผ๋ฏ€๋กœ ์ „์ฒด -7, sum์€ +7ํ•˜์—ฌ 7๋ถ„)
  • 0๋ถ„์ธ ์‹ฌ์‚ฌ๋Œ€๊ฐ€ ๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ ์‹ฌ์‚ฌ๋Œ€์ด๋ฏ€๋กœ ๋ฐ”๋กœ ์‚ฌ๋žŒ ํˆฌ์ž… [7, 3]
  • ์‹ฌ์‚ฌ๋Œ€ ์‹œ๊ฐ„ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ์‹œ๊ฐ„๋งŒํผ ๋นผ์คŒ ([7, 3]์—์„œ 3์ด ๊ฐ€์žฅ ์ž‘์œผ๋ฏ€๋กœ ์ „์ฒด -3, ์ „์ฒด ์‹œ๊ฐ„์€ +3ํ•˜์—ฌ 10๋ถ„)
  • 0๋ถ„์ธ ์‹ฌ์‚ฌ๋Œ€๊ฐ€ ๊ฐ€์žฅ ๋น ๋ฅธ ์‹ฌ์‚ฌ๋Œ€๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋น„๊ต
  • [4, 0] ์—์„œ 4+7 < 10 ์ด๋ฏ€๋กœ ๋‘๋ฒˆ์งธ ์‹ฌ์‚ฌ๋Œ€๊ฐ€ ์œ ๋ฆฌ [4, 10]
  • ๊ฐ€์žฅ ์ž‘์€ ์‹œ๊ฐ„ 4๋ถ„๋งŒํผ ๋นผ์คŒ [0, 6] ์ด 11+4 14๋ถ„์งธ
  • ๊ฐ€์žฅ ๋น ๋ฅธ ์ฒซ๋ฒˆ์งธ ์‹ฌ์‚ฌ๋Œ€๊ฐ€ ๋น„์—ˆ์œผ๋ฏ€๋กœ ๋ฐ”๋กœ ํˆฌ์ž… [7, 6]

4. ๋กœ์ง ์ˆ˜์ •

  • table์— Math.min(โ€ฆtable)์œผ๋กœ ๊ฐ€์žฅ ์ž‘์€ ์‹œ๊ฐ„์„ ๋นผ์ค„ ํ•„์š” ์—†์Œ!!
  • table์— ์†Œ์š”์‹œ๊ฐ„์„ ๋ˆ„์ ํ•˜๋ฉด ๋จ!!

2021-07-13

1. table์ดˆ๊ธฐ๊ฐ’ === times๋กœ ์ˆ˜์ •


โœ๏ธ์†Œ์Šค์ฝ”๋“œ

2021-07-13 ์ •ํ™•์„ฑ 33.3์ 

function solution(n, times) {
  times.sort((a, b) => a-b);
  let table = Array.from({length: times.length}, () => 0);
  DFS(n, table);

  function DFS(n, table) {
    if (n === 0) return;
    let minIndex = 0;
    let min = Number.MAX_SAFE_INTEGER;

    let newTable = table.map((v, i) => {
      v = v + times[i];
      if (v < min) [min, minIndex] = [v, i]
      return v;
    });

    table[minIndex] += times[minIndex];
    DFS(--n, table)
  }

  return Math.max(...table);
}