DINGA DINGA
article thumbnail
728x90

https://www.hackerrank.com/challenges/grading/problem

 

Grading Students | HackerRank

Round student grades according to Sam's rules.

www.hackerrank.com

Algorithms > Implementation

 

점수 배열이 주어지면 기준에 따라 점수를 수정하고, 수정된 점수 배열을 리턴하는 문제이다.

점수를 수정하는 기준은 다음과 같다.

1) 점수가 38 미만인 경우 - 그대로

2) 점수보다 높은 5의 배수 중 가장 작은 수와 점수의 차가 3 이상인 경우 - 그대로

3) 점수보다 높은 5의 배수 중 가장 작은 수와 점수의 차가 3 미만인 경우 - 점수보다 높은 5의 배수 중 가장 작은 수로 수정

 

 

코드

int* gradingStudents(int grades_count, int* grades, int* result_count) {
    *result_count = grades_count;
    int compare;	// 점수보다 높은 5의 배수 중 가장 낮은 수
    int *result = malloc(grades_count * sizeof(int));
    for (int i = 0; i < grades_count; i++){
        if (grades[i] < 38){					// 점수가 38 미만인 경우
            result[i] = grades[i];
            continue;
        }
        else if (grades[i] % 10 != 0 && grades[i] % 10 < 5)	// 점수의 일의 자리가 1~4인 경우
            compare = grades[i] / 10 * 10 + 5;
        else if (grades[i] % 10 > 5) 				// 점수의 일의 자리가 6~9인 경우
            compare = grades[i] / 10 * 10 + 10;
        else {							// 점수가 5의 배수인 경우
            result[i] = grades[i];
            continue;
        }
        
        if (compare - grades[i] < 3)	// compare와 점수의 차가 3 미만인 경우
            result[i] = compare;
        else
            result[i] = grades[i];
    }
    return result;
}

 

설명

점수보다 높은 5의 배수 중 가장 작은 수를 저장할 int형 변수 compare와 수정된 점수를 저장할 배열 result를 선언한다.

만약 점수가 38 미만이라면 수정사항이 없으므로 해당 점수를 그대로 result로 옮긴다.

만약 점수를 10으로 나눈 나머지, 즉 점수의 일의 자리가 1~4인 경우, compare에 점수의 일의 자리를 5로 바꾼 수를 저장한다.

점수의 일의 자리가 6 이상인 경우, compare에 점수의 일의 자리를 버리고 십의 자리 숫자를 하나 올린 값을 저장한다.

점수가 5의 배수라면 compare와의 연산이 필요 없으므로 해당 점수를 바로 result에 옮긴다.

그리고 compare와 원래 점수의 차가 3 미만인 경우, compare를 result에 저장하고, 3 이상인 경우 원래 점수를 result에 저장한다.

모든 수정 작업이 끝나면 result 배열을 리턴한다.

 

728x90

'C & C++ > HackerRank' 카테고리의 다른 글

[HackerRank] CamelCase  (1) 2021.07.21
[HackerRank] Insert a Node at the Tail of a Linked List  (0) 2021.07.16
[HackerRank] Cats and Mouse  (0) 2021.07.09
[HackerRank] Divisible Sum Pairs  (0) 2021.07.09
[HackerRank] Find the Median  (0) 2021.06.25