- Published on
Codility - Max Counters
- Author
- 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)
์ด ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ์ต๋ํ ๋ฐฐ์ด์ ํ๋ฒ์ ์ํํ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ๊ณ ์ ๋
ธ๋ ฅํ๋ค.