λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
κ°œμΈκ³΅λΆ€/Algorithm

[Level 1] 2μ£Όμ°¨_μƒν˜Έν‰κ°€

by πŸ‡λ°•λ΄‰λ΄‰πŸ‡ 2021. 9. 27.

 

 

Algorithm

-  2μ£Όμ°¨_μƒν˜Έν‰κ°€ -

 


 

문제

λŒ€ν•™ ꡐ수인 당신은, μƒν˜Έν‰κ°€λ₯Ό ν†΅ν•˜μ—¬ 학생듀이 μ œμΆœν•œ κ³Όμ œλ¬Όμ— 학점을 λΆ€μ—¬ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

μ•„λž˜λŠ” 0λ²ˆλΆ€ν„° 4번 κΉŒμ§€ λ²ˆν˜Έκ°€ 맀겨진 5λͺ…μ˜ 학생듀이 μžμ‹ κ³Ό λ‹€λ₯Έ ν•™μƒμ˜ 과제λ₯Ό ν‰κ°€ν•œ μ μˆ˜ν‘œμž…λ‹ˆλ‹€.

 

No. 0 1 2 3 4
0 100 90 98 88 65
1 50 45 99 85 77
2 47 88 95 80 67
3 61 57 100 80 65
4 24 90 94 75 65
평균 45.5 81.25 97.2 81.6 67.8
학점 F B A B D

μœ„μ˜ μ μˆ˜ν‘œμ—μ„œ, iν–‰ jμ—΄μ˜ 값은 i번 학생이 ν‰κ°€ν•œ j번 ν•™μƒμ˜ 과제 점수 μž…λ‹ˆλ‹€.

 

  • 0번 학생이 ν‰κ°€ν•œ μ μˆ˜λŠ” 0번 행에 λ‹΄κΈ΄ [100, 90, 98, 88, 65]μž…λ‹ˆλ‹€.
    • 0번 학생은 자기 μžμ‹ μ—κ²Œ 100점, 1번 ν•™μƒμ—κ²Œ 90점, 2번 ν•™μƒμ—κ²Œ 98점, 3번 ν•™μƒμ—κ²Œ 88점, 4번 ν•™μƒμ—κ²Œ 65점을 λΆ€μ—¬ν–ˆμŠ΅λ‹ˆλ‹€.
  • 2번 학생이 ν‰κ°€ν•œ μ μˆ˜λŠ” 2번 행에 λ‹΄κΈ΄ [47, 88, 95, 80, 67]μž…λ‹ˆλ‹€.
    • 2번 학생은 0번 ν•™μƒμ—κ²Œ 47점, 1번 ν•™μƒμ—κ²Œ 88점, 자기 μžμ‹ μ—κ²Œ 95점, 3번 ν•™μƒμ—κ²Œ 80점, 4번 ν•™μƒμ—κ²Œ 67점을 λΆ€μ—¬ν–ˆμŠ΅λ‹ˆλ‹€.

당신은 각 학생듀이 받은 점수의 평균을 κ΅¬ν•˜μ—¬, 기쀀에 따라 학점을 λΆ€μ—¬ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

 

λ§Œμ•½, 학생듀이 자기 μžμ‹ μ„ ν‰κ°€ν•œ μ μˆ˜κ°€ μœ μΌν•œ 졜고점 λ˜λŠ” μœ μΌν•œ μ΅œμ €μ μ΄λΌλ©΄ κ·Έ μ μˆ˜λŠ” μ œμ™Έν•˜κ³  평균을 κ΅¬ν•©λ‹ˆλ‹€.

 

  • 0번 학생이 받은 μ μˆ˜λŠ” 0번 열에 λ‹΄κΈ΄ [100, 50, 47, 61, 24]μž…λ‹ˆλ‹€. 자기 μžμ‹ μ„ ν‰κ°€ν•œ 100점은 μžμ‹ μ΄ 받은 점수 μ€‘μ—μ„œ μœ μΌν•œ μ΅œκ³ μ ‘μ΄λ―€λ‘œ, 평균을 ꡬ할 λ•Œ μ œμ™Έν•©λ‹ˆλ‹€.
    • 0번 ν•™μƒμ˜ 평균 μ μˆ˜λŠ” (50+47+61+24)/4 = 45.5μž…λ‹ˆλ‹€.
  • 4번 학생이 받은 μ μˆ˜λŠ” 4번 열에 λ‹΄κΈ΄ [65, 77, 67, 65, 65]μž…λ‹ˆλ‹€. 자기 μžμ‹ μ„ ν‰κ°€ν•œ 65점은 μžμ‹ μ΄ 받은 점수 μ€‘μ—μ„œ μ΅œμ €μ μ΄μ§€λ§Œ 같은 μ μˆ˜κ°€ 2개 더 μžˆμœΌλ―€λ‘œ, μœ μΌν•œ μ΅œμ €μ μ΄ μ•„λ‹™λ‹ˆλ‹€. λ”°λΌμ„œ, 평균을 ꡬ할 λ•Œ μ œμ™Έν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    • 4번 ν•™μƒμ˜ 평균 μ μˆ˜λŠ” (65+77+67+65+65)/5 = 67.8μž…λ‹ˆλ‹€.

μ œμ™Έν•  μ μˆ˜λŠ” μ œμ™Έν•˜κ³  평균을 κ΅¬ν•œ ν›„, μ•„λž˜μ˜ 기쀀에 따라 학점을 λΆ€μ—¬ν•©λ‹ˆλ‹€.

 

평균 학점
90점 이상 A
80점 이상 90점 미만 B
70점 이상 80점 미만 C
50점 이상 70점 미만 D
50점 미만 F

ν•™μƒλ“€μ˜ μ μˆ˜κ°€ λ‹΄κΈ΄ μ •μˆ˜ν˜• 2차원 λ°°μ—΄ scoresκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§‘λ‹ˆλ‹€. μ΄λ•Œ, ν•™μƒλ“€μ˜ 학점을 κ΅¬ν•˜μ—¬ ν•˜λ‚˜μ˜ λ¬Έμžμ—΄λ‘œ λ§Œλ“€μ–΄μ„œ return ν•˜λ„λ‘ solutionν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

 

μž…μΆœλ ₯ μ˜ˆμ‹œ

scores result
[[100,90,98,88,65],[50,45,99,85,77],[47,88,95,80,67],[61,57,100,80,65],[24,90,94,75,65]] "FABBD"
[[50,90],[50,87]] "DA"

 

문제 ν’€κΈ°

function solution(scores) {
    let result = '';
    for(let i = 0; i < scores.length; i++) {
        // 1. n번째 κ°’λ§Œ λͺ¨μ•„μ„œ 배열을 λ”°λ‘œ λ§Œλ“€μ–΄μ•Ό ν•œλ‹€.
        let gradeArr = [];
        scores.forEach(el => gradeArr.push(el[i]));
        // 5. ν•¨μˆ˜λ₯Ό 톡해 얻은 평균값을 기쀀에 맞게 값을 λ¦¬ν„΄μ‹œν‚¨λ‹€.
        result += solution3(solution2(gradeArr, i));
    }
    return result;
}

function solution2(arr, index) {
    let sum = arr.reduce((past, curr) => past + curr, 0);
    let [max, min] = [Math.max(...arr), Math.min(...arr)];
    // 2. λ³ΈμΈμ—κ²Œ μ€€ μ μˆ˜κ°€ μ΅œμ†Œ λ˜λŠ” 졜고점일 경우 점수λ₯Ό λ°°μ œν•œλ‹€.
    // 3. λ³ΈμΈμ—κ²Œ μ€€ μ μˆ˜κ°€ μ΅œμ†Œ, 졜고점일 지라도 μœ μΌν•œ 값이 μ•„λ‹ˆλΌλ©΄ λ°°μ œν•˜μ§€ μ•ŠλŠ”λ‹€.
    if(arr[index] === max) {
        let maxCount = arr.filter(el => el === arr[index]).length;
        if(maxCount === 1) return (sum - arr[index]) / (arr.length - 1);
    }
    else if(arr[index] === min) {
        let minCount = arr.filter(el => el === arr[index]).length;
        if(minCount === 1) return (sum - arr[index]) / (arr.length - 1);
    }
    // 4. 평균값을 ꡬ해 λ¦¬ν„΄ν•œλ‹€.
    return sum / arr.length;
}

function solution3(avg) {
    if(avg >= 90) return 'A';
    else if(avg >= 80 && avg < 90) return 'B';
    else if(avg >= 70 && avg < 80) return 'C';
    else if(avg >= 50 && avg < 70) return 'D';
    else return 'F';
}

 

μ΄λ²ˆλ¬Έμ œλŠ” 사싀 μ—„μ²­ μ–΄λ €μš΄ λ¬Έμ œλŠ” μ•„λ‹ˆμ—ˆμ§€λ§Œ μ²˜μŒμ— μˆ˜λ„μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ§€ μ•Šκ³  문제λ₯Ό ν•΄κ²°ν•˜λ©΄μ„œ μ‹œκ°„μ΄ μ’€ κ±Έλ Έλ‹€.

 

일단은 scoresλ‘œλΆ€ν„° 받은 배열듀을 ν•˜λ‚˜ν•˜λ‚˜ 검도해야 ν•˜κΈ° λ•Œλ¬Έμ— gradeArrμ΄λΌλŠ” 빈 배열을 λ§Œλ“€μ–΄ κ³ μ°¨ν•¨μˆ˜ forEachλ₯Ό μ‚¬μš©ν•΄ n번째 배열을 gradeArr에 ν•˜λ‚˜ν•˜λ‚˜ λ„£μ–΄μ€€λ‹€.

 

그런 λ‹€μŒμ— solution2λΌλŠ” ν•¨μˆ˜μ— ν•΄λ‹Ήλ°°μ—΄ gradeArr와 본인의 인덱슀λ₯Ό κ°€λ¦¬ν‚€λŠ” 값을 λ„£μ–΄μ„œ μƒˆλ‘œμš΄ ν•¨μˆ˜λ₯Ό λŒλ €μ£ΌλŠ”λ° μ΄λ•Œ λ³ΈμΈμ—κ²Œ μ€€ μ μ†Œκ°€ μ΅œμ†Œ λ˜λŠ” 졜고점일 경우 ν•΄λ‹Ή 점수λ₯Ό λ°°μ œν•˜λŠ” κ³Όμ •κ³Ό λ³ΈμΈμ—κ²Œ μ€€ μ μˆ˜κ°€ μ΅œμ €, 졜고점일 지라도 μœ μΌν•œ 값이 μ•„λ‹ˆλΌλ©΄ λ°°μ œν•˜μ§€ μ•Šμ€ 과정을 거쳐 평균값을 ꡬ해 내보낸닀.

 

λ§ˆμ§€λ§‰μœΌλ‘œ ν•΄λ‹Ή μ μˆ˜μ— λŒ€ν•œ 학점을 λΆ€μ—¬ν•΄μ£Όλ©΄ ν•¨μˆ˜λŠ” 완성이 λœλ‹€.

 

 

λ°˜μ‘ν˜•

λŒ“κΈ€