# [Algorithm/JS] ํ๋ก๊ทธ๋๋จธ์ค 42889 ์คํจ์จ
๐ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ (opens new window)
# Solution
function solution(N, stages) {
let answer = [];
for (let i = 1; i <= N; i++) {
let arrive = stages.filter((a) => a >= i).length; // ๋๋ฌํ ํ๋ ์ด์ด ์
let noPass = stages.filter((a) => a === i).length; // ๋๋ฌํ์ง๋ง ํต๊ณผํ์ง ๋ชปํ ํ๋ ์ด์ด ์
let rate = noPass / arrive; // ์คํจ์จ
answer.push([i, rate]);
}
answer.sort((a, b) => {
if (a[1] === b[1]) a[0] - b[0];
return b[1] - a[1];
});
answer.forEach((a, i) => (answer[i] = a[0]));
return answer;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# ํ์ด ์ค๋ช
arrive
: i ๋ฒ ์คํ ์ด์ง์ ๋๋ฌํ ํ๋ ์ด์ด ์
noPass
: i ๋ฒ ์คํ ์ด์ง์ ๋๋ฌํ์ง๋ง ํต๊ณผํ์ง ๋ชปํ ํ๋ ์ด์ด ์
rate
: ์คํจ์จ (noPass / arrive)
for ๋ฐ๋ณต๋ฌธ์ ํตํด ์คํ
์ด์ด์ง ์๋งํผ ๋ฐ๋ณตํํ์ฌ ๊ฐ ์คํ
์ด์ง์ ์คํจ์จ์ ๊ณ์ฐํ๋ค.
[์คํ
์ด์ง๋ฒํธ, ์คํจ์จ]
์ answer
์ push ํ๋ค
์คํจ์จ์ ๋ฐ๋ผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํด์ผํ๋ค. sort ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ ์คํจ์จ์ด ๊ฐ์ ๊ฒฝ์ฐ ์คํ ์ด์ง ๋ฒํธ๊ฐ ์์ ๊ฒ ๋ถํฐ ์ ๋ ฌํ๋ค.
answer.sort((a, b) => {
if (a[1] === b[1]) a[0] - b[0];
return b[1] - a[1];
});
2
3
4
๊ฐ ๋ฐฐ์ด์ [์คํ
์ด์ง ๋ฒํธ, ์คํจ์จ]
ํํ๋ก ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ด ์ ๋ ฌํ ์ ์๋ค.
์คํจ์จ์ด ๊ฐ์ ๊ฒฝ์ฐ ์คํ ์ด์ง ๋ฒํธ๊ฐ ์์ ๊ฒ์ผ๋ก ์ ๋ ฌ
if (a[1] === b[1]) a[0] - b[0];
์คํจ์จ์ด ํฐ ๊ฒ๋ถํฐ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
return b[1] - a[1];
answer.forEach((a, i) => (answer[i] = a[0]));
return answer;
2
๊ฐ ๋ฐฐ์ด์ ์ํํ๋ฉด์ ์คํ ์ด์ง ๋ฒํธ(a[0])๋ก ๋ฎ์ด์ด๋ค.
# ๋ด์ฉ ์ถ๊ฐ
์๋์ ๊ฐ์ด ์ ๋ ฌํ ๋ ์คํจ์จ์ด ๊ฐ๋ค๋ฉด ์คํ ์ด์ง๊ฐ ์์ ๊ฒ์ผ๋ก ์ ๋ ฌํ๋ ๊ณผ์ ์ ์ฌ์ค ํ์ ์๋ ๊ณผ์ ์ด์๋ค..
answer.sort((a, b) => {
if (a[1] === b[1]) a[0] - b[0]; // * ์ญ์ ํด์ผ ํ ์ฝ๋
return b[1] - a[1];
});
2
3
4
์ด์ ๋ ์ด๋ฏธ ์คํจ์จ์ ๊ณ์ฐํ๊ณ answer ์ pushํ๋ ๊ณผ์ ์์ ์ด๋ฏธ ์ฒซ๋ฒ์งธ ์คํ ์ด์ง๋ถํฐ ์ฐจ๋ก๋ก push ๋์๊ธฐ ๋๋ฌธ์ด๋ค.
for (let i = 1; i <= N; i++) {
let arrive = stages.filter((a) => a >= i).length; // ๋๋ฌํ ํ๋ ์ด์ด ์
let noPass = stages.filter((a) => a === i).length; // ๋๋ฌํ์ง๋ง ํต๊ณผํ์ง ๋ชปํ ํ๋ ์ด์ด ์
let rate = noPass / arrive; // ์คํจ์จ
answer.push([i, rate]);
}
2
3
4
5
6