본문 바로가기
카테고리 없음

자료구조와 알고리즘에 대하여(1)

by 데일리J형 2022. 4. 27.

성적 처리 관련 예제 프로그램을 통해 자료구조에 대해 알아봅니다. 기초적인 개념과 방식에 대해 설명합니다. 

 

자료구조에 이해

자료구조는 컴퓨터에서 처리할 자료를 효율적으로 관리하고 구조화시키기 위한 학문입니다. 자료를 효율적으로 사용하기 위해서 자료의 특성에 따라 분류하고 구성 후 저장하고 또 처리하는 모든 작업을 의미합니다. 컴퓨터는 반복적이거나 복잡한 자료처리를 효율적으로 처리하기 위한 전자 장치입니다. 이 컴퓨터를 이용하는 데 있어서 좀 더 효율적으로 자료를 표현해주고 정리해줄 필요가 있습니다. 이렇게 표현된 자료를 컴퓨터는 일정한 절차를 통해 처리하게 되는데, 이 구조에 대해서 알아볼 예정입니다.

 

일반적으로 프로그래밍은 "문제 이해 및 분석 → 프로그램의 변수 설계 → 프로그램 논리(순서도 또는 알고리즘) 설계 → 프로그램 코딩 → 프로그램 실행 및 디버깅"의 과정으로 구성됩니다. 간단한 문제의 경우, 프로그램의 변수 설계는 처리해야 할 자료 객체들의 속성과 이들 사이의 상관관계를 파악하여 이를 프로그램의 변수들로 정의해서 처리하면 되지만 복잡한 문제들의 경우 프로그램의 변수 설계는 그리 간단하게 해결할 수 있는 것이 아닙니다. 

예제로 N명의 학생들에 대해 학번(id), 1차 및 2차 시험성적(exam1, exam2)을 입력받아 총점(total), 평균(avg), 석차(rank)를 계산하는 프로그램을 작성해 봅니다.

#include <stdio.h>
#define N 5

struct student {
	int id;
    int exam1;
    int exam2;
    int total;
    float avg;
    int rank;
};

int computeTotal(int exam1, int exam2);
float computeAverage(int total, int num);
void sortTotals(struct student s[], int n);
void computeRanking(struct student s[], int n);

int main(void){
	struct student s[N];
    int i;
    
    /* 데이터 입력 */
    printf("\n학생들(%명)의 학번, 1차성적, 2차 성적을 입력하세요\n" , N);
    for (i=0; i<N; i++){
    	scanf("%d %d %d", &s[i].id, &s[i].exam1, &s[i].exam2);
        s[i].total = computeTotal(s[i].exam1, s[i].exam2);
        s[i].avg = computeAverage(s[i].total, 2);
	 }
 	sortTotals(s,N);
	 computeRanking(s,N);
 
 	/* 성적처리 결과출력 */
 	printf("\n 성적처리 결과 \n");
 	printf(" 석차 학번 1차성적 2차성적 총점 평균\n");
 	for (i = N-1; i>=0; i--){
 	printf(" %d %d %d %d  %3d  %5.1f\n"
 	s[i].rank, s[i].id, s[i].exam1, s[i].exam2, s[i].total, s[i].avg);
    }
}

- 처리 대상 : id, exam1, exam2, total, avg, rank 속성을 갖는 N명의 학생 객체들

- 처리 규칙 : 

1. 각 학생의 총점은 그 학생의 두 시험성적의 합으로 계산됩니다.

2. 각 학생에 평균은 그 학생의 총점을 2.0으로 나누어서 계산합니다.

3. 각 학생의 석차는 N명의 학생들의 총점들을 비교해서 얻어지는 상대적 순위에 의해 결정됩니다.

 

위의 예제 프로그램에 나타나는 자료 객체들의 변수 표현과 처리를 우리는 이 프로그램의 자료구조라고 합니다. 프로그래밍을 처음 공부할 때는 이런 변수들의 정의와 처리를 간단히 프로그램의 변수 설계라고 했었지만 이제부터는 좀 더 체계적이고 효율적인 프로그램의 개발을 위해 자료구조(data structure)라는 개념을 사용합니다.

 

프로그램의 변수 설계는 단순히 자료 객체의 표현 구조와 상관관계를 나타내지만 자료구조는 자료 객체 등의 표현 구조와 상관관계는 물론 자료 객체들에 대한 처리 연산을 함께 정의합니다.

댓글