[해커랭크] Grading Students

✳️ 문제 : LINK

해커랜드 대학은 다음의 성적 정책을 따름 :

  • 모든 학생은 0부터 100 사이의 점수를 받음
  • 40 점 미만은 낙제임
  • 점수랑 다음의 5의 배수와의 차이가 3보다 작으면 점수를 다음 5의 배수로 반올림함
  • 점수가 38 미만인 경우 낙제라서 반올림 발생하지 않음

✳️ 제한사항


✳️ 예시

  • grade = 84 → 85 // 다음 5의 배수가 85인데 차이가 3보다 작아서
  • grade = 29 → no // 어차피 낙제임
  • grade = 57 → no // 다음 5의 배수인 60과의 차이가 3보다 큼

✳️ 매개변수와 반환값

  • int grades[n] : 반올림 전의 성적
  • int[n] : 반올림된 후의 성적

✳️ 내가 푼 코드(with S)

function gradingStudents(grades) {
    let roundedGrades = [];
    grades.forEach((grade) => {
        if ((grade < 38) || ((5 - grade % 5) >= 3)) return roundedGrades.push(grade);   
        grade = grade + (5 - grade % 5); roundedGrades.push(grade);
    })
    return roundedGrades;
}

✳️ 생각 정리

  • 오늘 코코아 3주차 3조 분들이랑 금요일의 알고리즘 문제 중 비교적 쉬운 문제 하나를 골라 페어 프로그래밍을 진행해봤다.
  • 나는 S와 짝이되어 내가 설명하고 S가 코드를 짜주셨다.
  • 생각을 이해할 수 있게 잘 설명하는게 좀 어려웠는데 S가 잘 들어주셔서 쉽게 풀어낼 수 있었다!
  • 개인적으로 else if 구문을 싫어하고 가능하면 빨리 return 하는걸 좋아해서 이 부분을 슬쩍 말씀드려봤는데 받아들어주셔서 넘 기분 좋았다.
  • 후에 다른 분들이 푸신거 간단하게 리뷰했는데 forEach 말고 map을 쓴 분들이 인상깊었다. map 안에 if 조건문으로 하신분도 계시고 삼항 연산자로 구현하신 분들도 계셨다. 특히 후자의 분들은 짧은 시간에 많은 고민을 하신게 코드에서 보여서 넘 멋졌다.
  • 다른 분들은 코드를 작성하기전 의사코드로 먼저 설계를 해놓고 이후에 구현하셨는데 페어 프로그래밍을 할때 의사코드로 함께 문제 해결 과정을 논의하며 설계를 한 뒤에 구현하는 것도 참 좋아보였다! 다음에 언젠가 또 페어 프로그래밍을 하게 되면 참고해야지!

좋은 웹페이지 즐겨찾기