250x250
반응형
Notice
Recent Posts
Recent Comments
Link
N
(프로그래머스 JS)위클리 챌린지 2주차 본문
728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/83201
문제를 풀다가 행과 열을 반대로 생각해서 깜짝 놀랐다...ㅎㅎ
이 점만 주의하면 문제는 쉽게 풀 수 있다.
이중 for문을 이용한 문제 풀이.
현재 학생의 인덱스가 i라면 자신의 점수는 scores[i][i]다.
min = 현재 학생이 받은 점수 중 최저점.
max = 현재 학생이 받은 점수 중 최고점.
count = 자신을 채점한 점수와 다른 학생이 준 점수가 같은지 카운팅.
sum = 현재 학생이 받은 점수의 총 합.
numOfStudent = 평균을 낼 때 학생의 수.
배열을 [i][j]가 아닌 [j][i]로 순회해야 한다.
순회하면서 min과 max를 갱신해주면서, 방문한 값이 자신이 준 점수와 같은지 확인하면서, 총 점수까지 구하면서 진행했다.
중첩 for문이 끝나면 평균을 구해야 한다.
평균을 구하기 전, count === 1인지 확인한다.
만약 1이라면 자신이 준 점수가 유일하다는 뜻이기 때문이다.
또한, 자신이 준 점수가 최고점인지(max), 최저점인지(min) 확인하여 numOfStudent를 갱신한다.(참이라면 numOfStudent--)
이후 평균을 내어 grade 함수로 학점을 구하면 된다.
function grade(score){
if(score >= 90){
return "A";
}
else if(score >= 80 && score < 90){
return "B";
}
else if(score >= 70 && score < 80){
return "C";
}
else if(score >= 50 && score < 70){
return "D";
}
else{
return "F";
}
}
function solution(scores) {
const answer = [];
const length = scores.length;
for(let i = 0; i < length; i++){
const currentScore = scores[i][i];
let max = -1;
let min = 101;
let count = 0;
let sum = 0;
let numOfStudent = length;
for(let j = 0; j < length; j++){
max = max < scores[j][i] ? scores[j][i] : max;
min = min > scores[j][i] ? scores[j][i] : min;
count += scores[j][i] === currentScore ? 1 : 0;
sum += scores[j][i];
}
if(count === 1){
if(currentScore === max || currentScore === min){
numOfStudent--;
sum -= currentScore;
}
}
answer.push(grade(sum / numOfStudent));
}
return answer.join("");
}
728x90
반응형
'프로그래머스 알고리즘 > Weekly Challenge' 카테고리의 다른 글
(프로그래머스 JS)위클리 챌린지 6주차 (0) | 2021.09.07 |
---|---|
(프로그래머스 c++)위클리 챌린지 6주차 (0) | 2021.09.07 |
(프로그래머스 JS)위클리 챌린지 5주차 (0) | 2021.09.02 |
(프로그래머스 c++)위클리 챌린지 4주차 (0) | 2021.08.26 |
(프로그래머스 JS)위클리 챌린지 1주차 (0) | 2021.08.19 |