Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

남학생 또는 여학생의 성적 합계를 구하는 C 프로그램


문제 개요

marks라는 이름의 배열이 있다고 가정해 보겠습니다. 이 배열에는 학생들의 성적이 저장되어 있으며, 짝수 인덱스(marks[0], marks[2] 등)에는 남학생의 성적이, 홀수 인덱스에는 여학생의 성적이 들어 있습니다.

여기에 추가 입력으로 gender가 주어집니다. gender의 값은 'b' 또는 'g' 중 하나입니다. 값이 'b'이면 모든 남학생 성적의 합계를 반환하고, 'g'이면 모든 여학생 성적의 합계를 반환해야 합니다. (배열의 크기는 N)

예를 들어 입력이 N = 9, marks = [8,5,2,6,7,5,9,9,7], gender = 'g'라고 하면 출력은 25가 됩니다. 홀수 인덱스의 값인 5 + 6 + 5 + 9 = 25이기 때문입니다.

해결 접근 방법

이 문제는 다음 단계를 따라 해결할 수 있습니다:

  • 여학생 성적 합계(g_sum)와 남학생 성적 합계(b_sum)를 각각 0으로 초기화합니다.
  • i를 0부터 n-1까지 반복하면서 다음을 수행합니다:
    • i mod 2가 1, 즉 홀수 인덱스이면 g_sum에 marks[i]를 더합니다.
    • 그렇지 않으면(짝수 인덱스) b_sum에 marks[i]를 더합니다.
  • 반복이 끝난 후 gender가 'b'와 같으면 b_sum을 반환합니다.
  • 그 외의 경우 g_sum을 반환합니다.

구현 예제

아래 구현 예제를 통해 더 자세히 이해해 보겠습니다:

#include <stdio.h>
#define N 9
int solve(int marks[], int n, char gender){
    int g_sum = 0;
    int b_sum = 0;
    for(int i = 0; i < n; i++){
        if(i % 2 != 0){
            g_sum += marks[i];
        }else{
            b_sum += marks[i];
        }
    }
    if(gender == 'b')
        return b_sum;
    return g_sum;
}
int main(){
    int marks[N] = {8,5,2,6,7,5,9,9,7};
    char gender = 'g';

    int sum = solve(marks, N, gender);
    printf("%d", sum);
}

입력

{8,5,2,6,7,5,9,9,7}, 'g'

출력

25

코드 설명 및 복잡도

solve 함수는 배열 전체를 한 번만 순회하면서 인덱스의 홀짝 여부에 따라 값을 누적합니다. 따라서 시간 복잡도는 O(N)이며, 별도의 추가 메모리 없이 두 그룹의 합계를 동시에 계산할 수 있습니다. 이 방식은 데이터 양이 많아져도 선형 시간 안에 결과를 얻을 수 있어 매우 효율적입니다.