avatar
Published on

Codility - Max Counters

Author
  • avatar
    Name
    yceffort

Max Counters

๋ฌธ์ œ

์ˆซ์ž N์ด ์ฃผ์–ด์ง„๋‹ค. ์ด ์ˆซ์ž N์€ ๋ชจ๋“  ์š”์†Œ๊ฐ€ 0์ธ ๊ธธ์ด N์ธ ๋ฐฐ์—ด์„ ์˜๋ฏธํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐฐ์—ด A๊ฐ€ ์กด์žฌํ•œ๋‹ค.

์ˆซ์ž N์ด 5๋กœ ์ฃผ์–ด์ง€๊ณ , ๋ฐฐ์—ด A๋Š” [3, 4, 4, 6, 1, 4, 4] ๋ผ๊ณ  ๊ฐ€์ •ํ•˜์ž.

์ดˆ๊ธฐ ๊ฐ’ [0, 0, 0, 0 0]
A[0] = 3, 3๋ฒˆ์งธ (3-1๋ฒˆ์งธ) ์š”์†Œ์˜ ํฌ๊ธฐ๋ฅผ 1 ๋Š˜๋ฆฐ๋‹ค.
- [0, 0, 1, 0, 0]
A[0] = 4, 4๋ฒˆ์งธ (4-1๋ฒˆ์งธ) ์š”์†Œ์˜ ํฌ๊ธฐ๋ฅผ 1 ๋Š˜๋ฆฐ๋‹ค.
- [0, 0, 1, 1, 0]
A[0] = 4, 4๋ฒˆ์งธ (4-1๋ฒˆ์งธ) ์š”์†Œ์˜ ํฌ๊ธฐ๋ฅผ 1 ๋Š˜๋ฆฐ๋‹ค.
- [0, 0, 1, 2, 0]
A[0] = 6, ๋ชจ๋“  ์ˆซ์ž์˜ ํฌ๊ธฐ๋ฅผ ํ˜„์žฌ ๊ฐ€์žฅ ํฐ ๊ฐ’์œผ๋กœ ๋งž์ถ˜๋‹ค.
- [2, 2, 2, 2, 2]
....

์ตœ์ข… ๊ฒฐ๊ณผ๋Š”
- [3, 2, 2, 4, 2]

ํ’€์ด

function solution(N, A) {
  // 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ ๊ธธ์ด N์˜ ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค.
  const array = Array(N).fill(0)
  // ๋ฐฐ์—ด ๋‚ด ์ตœ๋Œ€ ๊ฐ’
  let max = 0
  // ๋งˆ์ง€๋ง‰ max counter์˜ ๊ธฐ์ค€์ด ๋˜์—ˆ๋˜ ์ˆ˜
  let maxCounter = 0
  for (let i = 0; i < A.length; i++) {
    // ๋ชจ๋“  ์ˆซ์ž๋ฅผ ์˜ฌ๋ ค์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
    if (A[i] > N) {
      // maxCounter์— ๋‹ค๊ฐ™์ด ์˜ฌ๋ผ๊ฐ€๋Š” ์ตœ๋Œ€ ์ˆซ์ž๋ฅผ ์ €์žฅํ•ด ๋‘”๋‹ค.
      maxCounter = max

      // ํ•˜๋‚˜์”ฉ๋งŒ ์˜ฌ๋ฆฌ๋ฉด ๋˜๋Š” ๊ฒฝ์šฐ
    } else {
      // ํ˜„์žฌ ์ˆซ์ž๊ฐ€ maxCounter๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ maxCounter๋กœ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค.
      if (array[A[i] - 1] < maxCounter) {
        array[A[i] - 1] = maxCounter
      }

      // ๊ทธ๋ฆฌ๊ณ  +1์„ ํ•œ๋‹ค
      array[A[i] - 1] += 1

      // ์ด๋ ‡๊ฒŒ ์ƒˆ๋กญ๊ฒŒ ์„ธํŒ…๋œ ์ˆซ์ž๊ฐ€ ๋ฐฐ์—ด์˜ ์ตœ๋Œ€๊ฐ’์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
      if (max < array[A[i] - 1]) {
        max = array[A[i] - 1]
      }
    }
  }

  // ๋ฐฐ์—ด์˜ ๊ฐ’์ด maxCounter๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ๊ทธ ๊ฐ’์œผ๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.
  return array.map((i) => (i < maxCounter ? maxCounter : i))
}

ํ•ด์„ค

์ฒ˜์Œ์—๋Š” ์ € maxCounter์•ก์…˜์„ array๋ฅผ map์„ ๋Œ๋ฉด์„œ +1 ์„ ํ•ด์คฌ๋”๋‹ˆ timeout ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค. ๊ทธ๋„ ๊ทธ๋Ÿด ๊ฒƒ์ด ์•ˆ๊ทธ๋ž˜๋„ ๋ฐฐ์—ด์„ nํšŒ ์ˆœํ™˜ํ•˜๋Š”๋ฐ, +1 ์„ํ•˜๋ฉด์„œ ๋˜ ์ˆœํ™˜ํ•˜๋ฉด ๋ณต์žก๋„๊ฐ€ O(N^2)์ด ๋  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์ตœ๋Œ€ํ•œ ๋ฐฐ์—ด์„ ํ•œ๋ฒˆ์— ์ˆœํ™˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ณ ์ž ๋…ธ๋ ฅํ–ˆ๋‹ค.

https://app.codility.com/demo/results/training7YGA6S-4D7/