Jieunny์ ๋ธ๋ก๊ทธ
[JS] ํ๋ก๊ทธ๋๋จธ์ค - ์คํจ์จ ๋ณธ๋ฌธ
๐ ๋ฌธ์
์ํผ ๊ฒ์ ๊ฐ๋ฐ์ ์ค๋ ๋ฆฌ๋ ํฐ ๊ณ ๋ฏผ์ ๋น ์ก๋ค. ๊ทธ๋ ๊ฐ ๋ง๋ ํ๋์ฆ ์ค์ฒ์ฑ์ด ๋์ฑ๊ณต์ ๊ฑฐ๋์ง๋ง, ์์ฆ ์ ๊ท ์ฌ์ฉ์์ ์๊ฐ ๊ธ๊ฐํ ๊ฒ์ด๋ค. ์์ธ์ ์ ๊ท ์ฌ์ฉ์์ ๊ธฐ์กด ์ฌ์ฉ์ ์ฌ์ด์ ์คํ ์ด์ง ์ฐจ์ด๊ฐ ๋๋ฌด ํฐ ๊ฒ์ด ๋ฌธ์ ์๋ค.
์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํ ๊น ๊ณ ๋ฏผ ํ ๊ทธ๋ ๋ ๋์ ์ผ๋ก ๊ฒ์ ์๊ฐ์ ๋๋ ค์ ๋์ด๋๋ฅผ ์กฐ์ ํ๊ธฐ๋ก ํ๋ค. ์ญ์ ์ํผ ๊ฐ๋ฐ์๋ผ ๋๋ถ๋ถ์ ๋ก์ง์ ์ฝ๊ฒ ๊ตฌํํ์ง๋ง, ์คํจ์จ์ ๊ตฌํ๋ ๋ถ๋ถ์์ ์๊ธฐ์ ๋น ์ง๊ณ ๋ง์๋ค. ์ค๋ ๋ฆฌ๋ฅผ ์ํด ์คํจ์จ์ ๊ตฌํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ผ.
- ์คํจ์จ์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ๋ค.
- ์คํ ์ด์ง์ ๋๋ฌํ์ผ๋ ์์ง ํด๋ฆฌ์ดํ์ง ๋ชปํ ํ๋ ์ด์ด์ ์ / ์คํ ์ด์ง์ ๋๋ฌํ ํ๋ ์ด์ด ์
์ ์ฒด ์คํ ์ด์ง์ ๊ฐ์ N, ๊ฒ์์ ์ด์ฉํ๋ ์ฌ์ฉ์๊ฐ ํ์ฌ ๋ฉ์ถฐ์๋ ์คํ ์ด์ง์ ๋ฒํธ๊ฐ ๋ด๊ธด ๋ฐฐ์ด stages๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์คํจ์จ์ด ๋์ ์คํ ์ด์ง๋ถํฐ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์คํ ์ด์ง์ ๋ฒํธ๊ฐ ๋ด๊ฒจ์๋ ๋ฐฐ์ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ๋ผ.
๐ก ์์ด๋์ด
์คํจ์จ = ์คํ
์ด์ง์ ๋๋ฌํ์ผ๋ ์์ง ํด๋ฆฌ์ดํ์ง ๋ชปํ ํ๋ ์ด์ด์ ์ / ์คํ
์ด์ง์ ๋๋ฌํ ํ๋ ์ด์ด ์
์ ์ฒด ์คํ
์ด์ง ๊ฐ์ N
๊ฒ์ ์ด์ฉ์๊ฐ ๋ฉ์ถฐ์๋ ์คํ
์ด์ง ๋ฒํธ ๋ฐฐ์ด stages
์คํจ์จ์ด ๋์ ์คํ
์ด์ง๋ถํฐ ๋ด๋ฆผ์ฐจ์์ผ๋ก
stages์ ์๋ ์คํ
์ด์ฆ ๋ฒํธ๋ ์ด์ ์ ํต๊ณผํ ์คํ
์ด์ง๋ ํฌํจํ๊ณ ์์.
1๋ฒ ์คํ
์ด์ง ์คํจ์จ => ๋ฐฐ์ด ์ซ์๊ฐ 1์ธ ์ฌ๋ / ๋ฐฐ์ด ์ซ์๊ฐ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์ฌ๋
2๋ฒ ์คํ
์ด์ง ์คํจ์จ => ๋ฐฐ์ด ์ซ์๊ฐ 2์ธ ์ฌ๋ / ๋ฐฐ์ด ์ซ์๊ฐ 2๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์ฌ๋
๋ฐ์ ๋ฐฐ์ด ์ค์์ ์ ์ผ ํฐ ์คํ
์ด์ง๊ฐ ๋ช ๋ฒ ์ธ์ง ๊ตฌํ๊ณ , ๊ทธ๋งํผ for๋ฌธ ๋๋ฆฌ๊ธฐ
๋ฐฐ์ด ์ธ๋ฑ์ค๋ฅผ ์คํ
์ด์ง ๋ฒํธ๋ผ๊ณ ํ๊ณ , ๊ทธ ์คํ
์ด์ง์ ๋จธ๋ฌผ๊ณ ์๋ ์ฌ๋ ๋ฐฐ์ด / ํต๊ณผํ ์ฌ๋ ๋ฐฐ์ด ๋ช๋ช
์ธ์ง ๋ง๋ค๊ธฐ
โ๏ธ ํ์ด
function solution(N, stages) {
var answer = [];
let maxStages = Math.max(...stages);
if(maxStages === (N + 1)){
maxStages = N;
}
let stayStage = new Array(maxStages + 1); // ํด๋น ์คํ
์ด์ง์ ๋จธ๋ฌผ๊ณ ์๋ ์ฌ๋ ์
let passStage = new Array(maxStages + 1); // ๊ทธ ์คํ
์ด์ง๋ฅผ ํต๊ณผํ ์ฌ๋ ์
stayStage.fill(0);
passStage.fill(0);
let failPercentage = [];
for(let i=0; i<stages.length; i++){
if(stages[i] === N + 1){
continue;
}
else{
stayStage[stages[i]]++;
}
}
for(let i=0; i<stages.length; i++){
for(let j=0; j<=maxStages; j++){
if(stages[i] === maxStages){
}
if(stages[i] >= j){
passStage[j]++;
}
}
}
for(let i=0; i<stayStage.length; i++){
failPercentage.push(stayStage[i] / passStage[i]);
}
failPercentage.shift(); // ์คํ
์ด์ง์ 0 ์์ผ๋ฏ๋ก 0 ์ธ๋ฑ์ค ๋นผ์ฃผ๊ธฐ
let indexArr = [];
for(let i=0; i<failPercentage.length; i++){
indexArr.push(i + 1);
}
for(let i=0; i<failPercentage.length-1; i++){
let temp = 0;
let idxTemp = 0;
for(let j=i+1; j<failPercentage.length; j++){
if(failPercentage[i] < failPercentage[j]){
temp = failPercentage[i];
failPercentage[i] = failPercentage[j];
failPercentage[j] = temp;
idxTemp = indexArr[i];
indexArr[i] = indexArr[j];
indexArr[j] = idxTemp;
}
else if(failPercentage[i] === failPercentage[j]){
if(indexArr[i] > indexArr[j]){
idxTemp = indexArr[i];
indexArr[i] = indexArr[j];
indexArr[j] = idxTemp;
}
}
}
}
return indexArr;
}
โฐ ํ ์คํธ ์ผ์ด์ค 27๊ฐ ์ค์ 16๊ฐ ํต๊ณผ..ใ
โ๏ธ ๋ค์ ํผ ํ์ด
function solution(N, stages) {
var answer = [];
let stay = 0;
let pass = 0;
let failRate = 0;
let failArr = [[]];
for(let i=1; i<N+1; i++){ // ์คํ
์ด์ง ๋ฒํธ ๋๋ for๋ฌธ
for(let j=0; j<stages.length; j++){ // ์ฃผ์ด์ง stages ๋ฐฐ์ด ๋๋ for๋ฌธ
if(stages[j] === i){ // ๋์ด ๊ฐ์ผ๋ฉด ๋จธ๋ฌผ๊ณ ์๋ ๊ฑฐ๋๊น
stay++;
}
if(stages[j] >= i){ // stages๋ฐฐ์ด์ด ๊ฐ๊ฑฐ๋ ํฌ๋ฉด ๊ทธ ์คํ
์ด์ง๋ pass ํ๊ฑฐ๋ ๋๋ฌํ ๊ฑฐ๋๊น
pass++;
}
}
failRate = stay / pass;
failArr.push([i, failRate]); // ์คํ
์ด์ง ๋ฒํธ ์ ๋ ฌ์ ํ์ํ๋๊น ๊ฐ์ ธ์ค๊ธฐ
stay = 0; // ์คํ
์ด์ง ๋ฒํธ๋ง๋ค ์ด๊ธฐํ ํด์ค์ผํจ.
pass = 0;
}
failArr.shift();
failArr.sort(function(a, b){
return b[1] - a[1];
});
for(let i=0; i<failArr.length; i++){
answer.push(failArr[i][0]);
}
return answer;
}
โฐ ์ฌ๊ธฐ์ ๊ธฐ ์ฐพ์๋ณด๊ณ ์์ด๋์ด๋ ๊ฐ์๋ฐ ๋ฐฐ์ด์ ์๋ฃ๊ณ ํ๋ ๋ถ์ ๋ด์ ๊ทธ๋ฐ ์์ผ๋ก ๋ค์ ๊ตฌํํด๋ดค๋๋ ์ ๋ฌ๋ค....
'Study > Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] ํ๋ก๊ทธ๋๋จธ์ค - ๋ก๋์ ์ต๊ณ ์์์ ์ต์ ์์ (0) | 2023.01.27 |
---|---|
[JS] ํ๋ก๊ทธ๋๋จธ์ค - ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ์ ๊ธ์ (0) | 2023.01.27 |
[JS] ํ๋ก๊ทธ๋๋จธ์ค - ํธ๋ ํ์ดํธ ๋ํ (0) | 2023.01.26 |
[JS] ํ๋ก๊ทธ๋๋จธ์ค - ๋ชจ์ ๊ณ ์ฌ (0) | 2023.01.25 |
[JS] ํ๋ก๊ทธ๋๋จธ์ค - ์์ ์ฐพ๊ธฐ (์๋ผํ ์คํ ๋ค์ค์ ์ฒด ์๊ณ ๋ฆฌ์ฆ) (0) | 2023.01.25 |