https://programmers.co.kr/learn/courses/30/lessons/83201?language=javascript
나의 풀이
이중 for 문에서 2차원 배열인 scores의 각 학생들에 대한 점수를 sum에 push 하였다.
조건으로 유일한 최고점 또는 최저점인 경우 splice로 제거하였다.
이후에 sum을 reduce 하고 sum의 길이로 나눔으로써 평균을 sumList에 push 하였다.
반복문을 벗어나면 sumList를 forEach안에서 switch 문을 사용하여 문자 형식의 점수를 매겼다.
통과를 하고 보니, 코드가 원시적이라는 느낌이 들었던 것 같다.
function solution(scores) {
const sumList = [];
let answer;
for (let i = 0; i < scores.length; i++) {
let sum = [];
for (let j = 0; j < scores.length; j++) {
sum.push(scores[j][i]);
if (j === scores.length - 1) {
sum.forEach(function (item, index) {
if ((index === i) && (sum.indexOf(item) === sum.lastIndexOf(item)) && ((item === Math.max.apply(null, sum)) || (item === Math.min.apply(null, sum)))) {
sum.splice(index, 1);
}
});
}
}
sumList.push(sum.reduce((acc, cur) => acc + cur) / sum.length);
}
sumList.forEach(function (item, index) {
switch(true) {
case (item >= 90):
sumList.splice(index, 1, "A");
break;
case (item >= 80 && item < 90):
sumList.splice(index, 1, "B");
break;
case (item >= 70 && item < 80):
sumList.splice(index, 1, "C");
break;
case (item >= 50 && item < 70):
sumList.splice(index, 1, "D");
break;
case (item < 50):
sumList.splice(index, 1, "F");
break;
}
});
return answer = sumList.join("");
}
다른 사람의 풀이
function solution(scores)
{
return scores
.map((score,i)=>{
return scores.map(v=>v[i])
}) <-- 새로운 2차원 배열로 변환
.map((score,i)=>{
let sum = score.reduce((a,b)=>a+b)
let avg = sum / score.length
let m = score.splice(i, 1)[0]
if(m > Math.max.apply(null,score) || m < Math.min.apply(null,score)){
sum -= m
avg = sum / score.length
}
return 'FFFFFDDCBAA'[Math.floor(avg/10)]
})
.join('')
}
map의 활용에 정신이 번쩍 들었다.
map으로 배열 요소를 새로운 배열로 바꿀 수 있다는 발상을 나는 하지 못했던 것이다.
그렇게 바뀐 값을 모두 더하고 평균을 낸 뒤에,
m이라는 값을 splice(i, 1)을 통해 자기 자신을 평가한 값에 접근하여 할당했다.
그 값이 유일한 최고점 또는 최저점인 경우에 다시 합산하고 평균을 내었다.
마지막 문자열 반환 또한 처음 보는 방식이었는데,
0 ~ 100 사이의 문자 형식의 점수 분포를 'FFFFFDDCBAA'로 표현하였다.
나의 switch문은 만리장성처럼 길게 느껴진 순간이었다..
아무튼 값의 평균을 10으로 나누어 스케일을 조절하여 이 문자열의 인덱스로 활용했다.
그렇게 변환된 배열을 join 하여 문자열로 만들어 반환하였다.
다시 한번 map의 활용성에 대해 알게 되었다..!
그리고 점수 분포를 표현하는 방식도 기발했다.
알고리즘은 역시 많이 풀어봐야 한다!
'IT > Algorithm' 카테고리의 다른 글
Stack 스택이란? (0) | 2021.10.13 |
---|---|
프로그래머스) 복서 정렬하기 (0) | 2021.10.13 |
Quick Sort (0) | 2021.10.08 |
프로그래머스) [1차] 다트 게임 (0) | 2021.10.06 |
Merge sort (0) | 2021.10.02 |