๋ฐ์ํ
๋ฌธ์
- ํค์๋: ์คํจ์จ, ๋ด๋ฆผ์ฐจ์(์ ๋ ฌ)
- ๊ณ ๋ ค์ฌํญ: stages๊ฐ 200,000์ดํ → O(NlogN) ์ด๋ด์ ์๊ฐ ๋ณต์ก๋
๋์ ํ์ด
- ์๊ฐ๋ณต์ก๋: O(M x N)
function solution(N, stages) {
// โ ๋ฐฐ์ด ์ด๊ธฐํ: O(N)
const challengers = new Array(N).fill(0);
const losers = new Array(N).fill(0);
// โ ์คํ
์ด์ง์ ๋๋ฌํ ์ฌ์ฉ์ ์์ ๋์ ํ๋ ์ฌ์ฉ์ ์ ๊ตฌํ๊ธฐ: O(M x N)
for (let stage of stages) {
if (stage > N) {
stage = N;
} else {
losers[stage - 1]++;
}
for (let i = 0; i < stage; i++) {
challengers[i]++;
}
}
// โ ์คํจ์จ ๊ณ์ฐ: O(N)
const failureRate = [];
for (let i = 0; i < N; i++) {
failureRate.push(losers[i] / challengers[i]);
}
// โ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ: O(NlogN)
const sorted = Array.from(failureRate.keys())
.sort((a, b) => failureRate[b] - failureRate[a])
.map(index => index + 1);
return sorted;
}
stages
๋ฐฐ์ด์ ์ํํ๋ฉฐ ๊ฐ ํ๋ ์ด์ด์ ํ์ฌ ์คํ
์ด์ง๋ฅผ ํ์ธํ๊ณ , ํด๋น ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก challengers
์ losers
๋ฐฐ์ด์ ์
๋ฐ์ดํธํฉ๋๋ค. ์ดํ ๊ฐ ์คํ
์ด์ง์ ์คํจ์จ์ ๊ณ์ฐํ์ฌ failureRate
๋ฐฐ์ด์ ์ ์ฅํ๊ณ , ๋ง์ง๋ง์ผ๋ก ์คํจ์จ์ ๊ธฐ์ค์ผ๋ก ์คํ
์ด์ง ๋ฒํธ๋ฅผ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ์ฌ ๋ฐํํฉ๋๋ค.
๋ฌธ์ ์
- ์คํ ์ด์ง์ ๋๋ฌํ ์ฌ์ฉ์์ ์๋ฅผ ๊ตฌํ๋ ๊ณผ์ ์์ ์ด์ค ๋ฐ๋ณต๋ฌธ ์ฌ์ฉ
- ํ๋ ์ด์ด์ ์คํ ์ด์ง๊ฐ N๋ณด๋ค ํฌ๋ฉด N์ผ๋ก ์กฐ์
- ์คํ
์ด์ง ๋ฒํธ๋ฅผ ๋ฐํํ๋ ๊ณผ์ ์์ ๋ฐ์ํ๋ ์ถ๊ฐ์ ์ธ ์ฐ์ฐ:
map(index => index + 1)
๋ค๋ฅธ ํ์ด
- ์๊ฐ๋ณต์ก๋: O(M + NlogN)
function solution(N, stages) {
// โ ์คํ
์ด์ง๋ณ ๋์ ์ ์๋ฅผ ๊ตฌํจ
const challenger = new Array(N + 2).fill(0);
for (const stage of stages) {
challenger[stage] += 1;
}
// โ ์คํ
์ด์ง๋ณ ์คํจํ ์ฌ์ฉ์ ์ ๊ณ์ฐ
const fails = {};
let total = stages.length;
// โ ๊ฐ ์คํ
์ด์ง๋ฅผ ์ํํ๋ฉฐ, ์คํจ์จ ๊ณ์ฐ
for (let i = 1; i <= N; i++) {
if (challenger[i] === 0) {
// โ ๋์ ํ ์ฌ๋์ด ์๋ ๊ฒฝ์ฐ, ์คํจ์จ์ 0
fails[i] = 0;
continue;
}
// โ ์คํจ์จ ๊ณ์ฐ
fails[i] = challenger[i] / total;
// โ ๋ค์ ์คํ
์ด์ง ์คํจ์จ์ ๊ตฌํ๊ธฐ ์ํด ํ์ฌ ์คํ
์ด์ง์ ์ธ์์ ๋บ
total -= challenger[i];
}
// โ ์คํจ์จ์ด ๋์ ์คํ
์ด์ง๋ถํฐ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ
const result = Object.entries(fails).sort((a, b) => b[1] - a[1]);
// โ ์คํ
์ด์ง ๋ฒํธ๋ง ๋ฐํ
return result.map((v) => Number(v[0]));
}
- N๋ฒ์งธ ์คํ ์ด์ง์ ๋๋ฌํ ์ฌ์ฉ์ ์ = (์ ์ฒด ์ฌ์ฉ์ ์) - (N-1๋ฒ์งธ ์คํ ์ด์ง์ ๋๋ฌํ ์ฌ์ฉ์ ์)
stages
์ ๋ฐ์ดํฐ ๊ฐ์challenger
์ ์ธ๋ฑ์ค๋ก ์ฌ์ฉ (๊ฐ ์์ฒด๋ฅผ ์ธ๋ฑ์ค๋ก ํ์ฉ)
Reference
๋ฐ์ํ
'๐ข Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Javascript][Programmers] ํ ํธ์ง - 2021 ์นด์นด์ค ์ฑ์ฉ์ฐ๊ณํ ์ธํด์ญ (0) | 2024.08.09 |
---|---|
[Javascript][Programmers] ํฌ๋ ์ธ ์ธํ๋ฝ๊ธฐ ๊ฒ์ (0) | 2024.08.05 |
[Javascript][Programmers] ์ฃผ์ ๊ฐ๊ฒฉ (0) | 2024.08.03 |
[Javascript][Programmers] ๊ดํธ ํ์ ํ๊ธฐ (0) | 2024.08.01 |
[Javascript][Programmers] ๋ฐฉ๋ฌธ ๊ธธ์ด (0) | 2024.07.30 |