[Hackerrank] Grading Students 문제 해설 - Algorithms > Implementation / Easy
Grading Students
1. 문제 설명
이번 문제는 HackerLand University의 성적 판별 기준을 제시하고 입력된 학생들의 최종
grade
를 산출하는 문제다.HackerLand University의 기준은 다음과 같다.
- 모든 학생은 0 ~ 100점 사이의
grade
를 부여 받는다. - 40점보다 낮은 점수는 fail 처리 한다.
교수인 Sam의 기준은 다음과 같다.
- 해당 학생의
grade
와 다음 5의 배수인 값의 차가 3점 이하면 해당grade
를 해당 값으로 올려준다. - 점수가 38점보다 낮을 경우 반올림 하지 않는다.
예를 들어,
grade = 84
라면 점수를 상향 조정 해 최종 결과는 85가 된다. 하지만
grade = 29
라면 40점보다 낮은 점수이므로 반올림 하지 않으며, 최종 결과는 29가 된다.2. Input Format
첫번째 줄에는 Sam의 수업에 참여하는 학생의 수(
이후 i번째 줄에는 각 학생의 점수가 주어진다.
n
)가 주어진다.이후 i번째 줄에는 각 학생의 점수가 주어진다.
3. Output Format
i번째 줄에 반올림 처리가 된
gradei
가 표시된다.Sample Input
4 73 67 38 33
Sample Output
75 67 40 33
Solution
이 문제의 제약 사항은 2가지다.
- 다음 5의 배수인 값과의 차이가 3보다 작을 경우 해당 값으로 반올림 해준다.
- 40점 미만인 학생은 반올림 하지 않고 기존 점수를 유지한다.
일단, 반올림 최소 점수인 38점을 기준으로 한 번 점수를 검증한다.
이후에 5의 배수 값으로 반올림 할 것인지 판단하다. 이 때 판단 기준은
ex1. grade = 37
ex2. grade = 44
ex3. grade = 41
이후에 5의 배수 값으로 반올림 할 것인지 판단하다. 이 때 판단 기준은
5 - (점수 % 5) < 3
이 된다. 학생의 점수를 5로 나누면 5다음 5의 배수와의 차이를 알 수 있다.ex1. grade = 37
5 - (37 % 5 ) = 3 //5의 배수와의 차이는 3이지만, 최소 점수인 38점보다 낮기 때문에 결과값은 37이 됨
ex2. grade = 44
5 - (44 % 5) = 1 //반올림 해서 결과값은 45가 됨
ex3. grade = 41
5 - (41 % 5) = 4 //기준값인 3보다 크므로 결과값은 41이 됨
최종 코드는 다음과 같다.
const MIN_GRADE = 38;
const MIN_DIFF = 3;
function solve(grades){
return grades.map((grade) => {
let result = grade;
const plus = 5 - (grade % 5);
if (grade < MIN_GRADE) {
return result;
}
if (plus < MIN_DIFF) {
result = grade + plus;
}
return result;
});
}
function main() {
var n = parseInt(readLine());
var grades = [];
for(var grades_i = 0; grades_i < n; grades_i++){
grades[grades_i] = parseInt(readLine());
}
var result = solve(grades);
console.log(result.join("\n"));
}
댓글
댓글 쓰기