-
HackerRank 문제 해석, 풀이 Grading Student - Java scriptAlgorithm 2023. 4. 12. 12:52728x90
문제 해석
해커랜드대학교는 다음과 같은 평가 방침을 갖고있다.
-모든 학생은 0-100점사이의 점수를 받음
-40점 미만은 F
Sam교수는 학생들을 아래와 같은 방식으로 점수를 주려 한다.
-한 학생의 점수가 현 점수의 다음 5의 배수보다 3이하로 차이난다면, 반올림하여 현 점수의 다음 5의 배수를 준다.
-점수가 38점 이하라면, 반올림을 해봤자 fail이기 때문에 반올림하지 않는다.
example
-점수 = 84 (84의 다음 5의 배수는 85이기 때문에 1 차이가 나서 반올림. 점수는 85점을 준다. )
-점수 = 29 ( 38점 이하는 반올림 할 것도 없이 fail. 점수는 그대로 29를준다. )
-점수 = 57 (57의 다음 5의 배수는 60이기 때문에 3 차이가 나서 반올림 하지 않음. 점수는 그대로 57점을 준다. )
파라미터로 Sam의 n명의 학생들의 점수가 주어진다. 이는 배열의 형태일 것이고 이를 자동으로 위의 양식대로 반올림을 진행하는 함수를 만들면 됨.
난 진짜 수학머리가 없다.
그래서 하나하나 대입해보며 반올림을 하는 경우와 아닌 경우의 로직을 만들었다.
1. 57점
57점의 다음 5의 배수는 60, 차수가 4이므로 반올림안함
57%5 나머지는 2 => no round up
2. 58점
60과 차수가 2이므로 반올림.
58%5 나머지는 3 => round up
3. 59점
60과 차수가 1이므로 반올림
59%5 나머지 4 => round up
케이스를 하나씩 대입해보니, grade를 5로 나눈 나머지가 3이상일 때에만 반올림을 하는 것으로 분석할 수 있었다.
이중삼항연산자 혹은 이중if문 이용 삽가능
처음엔 배열이 파라미터로 주어진다는걸 제대로 안읽고 풀어서 계속 오답나와서 사이트 탓만 하다가 내가 바봉인것을 뒤늦게 깨달았다.
function gradingStudents(grades) { let answer = [...grades]; grades.map((e, i) => e >= 38 ? e % 5 >= 3 ? (answer[i] = Math.floor(e / 5 + 1) * 5, console.log(answer[i], "반올림")) : console.log(answer[i], "반올림하지 않음") : (answer[i] = e, console.log(answer[i], "fail은 반올림하지 않음")) ); return answer; }
음 근데 이중삼항연산자는 역시 가독성이 떨어진다.
if문으로.
function gradingStudents(grades) { let answer = [...grades]; grades.map((e, i) => { console.log(e); if (e >= 38) { console.log("pass"); if (e % 5 >= 3) { answer[i] = Math.floor(e / 5 + 1) * 5; console.log(answer[i], "반올림"); } else console.log(answer[i], "반올림하지 않음"); } else { console.log("fail"); answer[i] = e; console.log(answer[i], "fail은 반올림하지않음"); } }); return answer; } console.log(gradingStudents([73, 67, 38, 33]));
난 오늘도 콘솔을 오지게 찍는다 근데 HackerRank 단점. 코드에 한국어가 하나라도 있으면 에런난다....
프로그래머스에서는 이따구로 문제풀어왔던 난 이제 어떡행..?
정답
'use strict'; const fs = require('fs'); process.stdin.resume(); process.stdin.setEncoding('utf-8'); let inputString = ''; let currentLine = 0; process.stdin.on('data', function(inputStdin) { inputString += inputStdin; }); process.stdin.on('end', function() { inputString = inputString.split('\n'); main(); }); function readLine() { return inputString[currentLine++]; } /* * Complete the 'gradingStudents' function below. * * The function is expected to return an INTEGER_ARRAY. * The function accepts INTEGER_ARRAY grades as parameter. */ function gradingStudents(grades) { let answer = [...grades]; grades.map((e, i) => { if (e >= 38) { if (e % 5 >= 3) { answer[i] = Math.floor(e / 5 + 1) * 5; } } else { answer[i] = e; } }); return answer; } function main() { const ws = fs.createWriteStream(process.env.OUTPUT_PATH); const gradesCount = parseInt(readLine().trim(), 10); let grades = []; for (let i = 0; i < gradesCount; i++) { const gradesItem = parseInt(readLine().trim(), 10); grades.push(gradesItem); } const result = gradingStudents(grades); ws.write(result.join('\n') + '\n'); ws.end(); }
혹은
'use strict'; const fs = require('fs'); process.stdin.resume(); process.stdin.setEncoding('utf-8'); let inputString = ''; let currentLine = 0; process.stdin.on('data', function(inputStdin) { inputString += inputStdin; }); process.stdin.on('end', function() { inputString = inputString.split('\n'); main(); }); function readLine() { return inputString[currentLine++]; } /* * Complete the 'gradingStudents' function below. * * The function is expected to return an INTEGER_ARRAY. * The function accepts INTEGER_ARRAY grades as parameter. */ function gradingStudents(grades) { let answer = [...grades]; grades.map((e, i) => e >= 38 ? e % 5 >= 3 ? answer[i] = Math.floor(e / 5 + 1) * 5 : null : answer[i] = e ); return answer; } function main() { const ws = fs.createWriteStream(process.env.OUTPUT_PATH); const gradesCount = parseInt(readLine().trim(), 10); let grades = []; for (let i = 0; i < gradesCount; i++) { const gradesItem = parseInt(readLine().trim(), 10); grades.push(gradesItem); } const result = gradingStudents(grades); ws.write(result.join('\n') + '\n'); ws.end(); }
728x90'Algorithm' 카테고리의 다른 글
코딩테스트에 많이 쓰이는 자바스크립트 메서드 reduce(), 누적값, 중복요소 찾기 (0) 2023.04.19 HackerRank 문제 해석, 풀이 Apple and Orange-Java script (0) 2023.04.12 알고리즘 하드코딩 장인 [프로그래머스] 약수의 개수와 덧셈 (코드 간결화) (0) 2023.04.11 HackerRank 문제 해석, 풀이 Plus Minus- Java script (0) 2023.04.06 [알고리즘풀기] 프로그래머스 로그인성공? (0) 2023.03.30