- 90점 이상 A
- 80점 이상 90점 미만 B
- 70점 이상 80점 미만 C
- 50점 이상 70점 미만 D
- 50점 미만 F
입출력 예시
- 입력 : scores, 출력 : result
- scores = [[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]]
- result = "FBABD"
- scores = [[50,90],[50,87]]
- result = "DA"
function solution(scores) {
// score = [[0이 받은 점수], [1이 받은 점수], [2가 받은 점수], [3이 받은 점수], [4가 받은 점수]]를 구한다.
let score = new Array(scores.length).fill(0).map((el) => new Array(scores.length).fill(0))
for(let i = 0; i < score.length; i++){
for(let j = 0; j < score.length; j++){
score[i][j] = scores[j][i];
}
}
// score의 각 요소에서 본인한테 준 점수가 유일하고, 최고점 혹은 최저점인지 확인한다.
// 예) 배열 [0이 받은 점수] 요소들 중 [0][0]가 유일하고 max or min인지 확인한다.
const isUniqueMaxMin = (arr, num, idx) => {
let max = Math.max(...arr);
let min = Math.min(...arr);
for(let i = 0; i < arr.length; i++){
if(num === arr[i] && i !== idx) return false;
}
if(max === num || min === num) return true;
return false;
}
// 조건이 맞다면 해당 배열에서 본인 점수를 삭제한다.
// 예) [0이 받은 점수].splice(0, 1)
for(let i = 0; i < score.length; i++){
if(isUniqueMaxMin(score[i], score[i][i], i)) score[i].splice(i, 1);
}
// 새롭게 정의된 score의 각 요소들의 평균값을 구한 뒤 새로운 배열(avg)에 할당한다.
// 예) 배열 [0이 받은 점수]의 각 요소들을 다 더한 뒤 [0이 받은 점수]의 길이만큼 나눈다.
// avg = [0의 평균값, 1의 평균값, 2의 평균값, 3의 평균값, 4의 평균값]
let avg = new Array;
for(let i = 0; i < score.length; i++){
avg.push(score[i].reduce((acc, cur) => acc + cur) / score[i].length);
}
// 해당 평균값에 맞는 학점(grade)으로 치환한다.
let grade = new Array;
for(let i = 0; i < avg.length; i++){
if(avg[i] >= 90) grade.push('A');
else if(avg[i] >= 80) grade.push('B');
else if(avg[i] >= 70) grade.push('C');
else if(avg[i] >= 50) grade.push('D');
else grade.push('F');
}
// grade.join()을 통해 문자열로 리턴한다.
return grade.join('');
}
문제를 처음 읽었을 땐 복잡하다고 느꼈는데 생각보다 술술 풀려서 놀랬다. ㅎㅎ 보기 쉽게 작성하느라 구구절절한 느낌이 들지만... 그래도 만족한다. ㅎㅎㅎ
일단 함수를 사용한 내 자신 칭찬해~~ 함수를 만들고 그걸 이용하는게 이젠 두렵지가않다! fill, map, reduce, splice, push, join 등 많은 메소드를 사용한 것도 칭찬해~~~👏 JS 문법에 많이 익숙해진 거 같아 쪼꿈은 뿌듯하다. ๑•‿•๑
하나 아쉬운 점은 분명.. 이것보단 덜 써도 되겠지..?싶은 생각이 자꾸 든다는 것. 알고리즘 다운 알고리즘을 구현하기 위해 숏코딩을 써보도록 좀 더 고민해보자!
그리고 시간이 된다면 java로 구현해보자. ^-^
출처 : 프로그래머스 2주차_상호평가