카운터, 누적, 산술평균 알고리즘 예제를 통하여 1차원 배열과 2차원 배열의 원리와 사용 형태를 완전하게 숙지하고, 순서도에 대한 개념을 굳힐 수 있도록 예제와 해설, 동영상 강의를 게재합니다.

특히 예제는 정보처리기능사 실기시험에서 알고리즘 문제로 출제된 적이 있는 유형이기도 합니다.
게재한 예제와 해설은 강의에 담은 내용으로 필자가 작성한 교재에서 발췌한 것입니다. (해당 내용은 1페이지 분량의 문서 파일로도 첨부하니 참고하시기 바랍니다.)

정보처리 실기 알고리즘 카운터, 합계, 누적, 산술평균
정보처리 실기 알고리즘 카운터, 합계(누적), 산술평균 교재 샘플

예제 1) 100명의 학생에 대한 국어점수가 배열에 기억되어 있다. 국어점수가 80점 이상인 학생의 수, 총점, 평균점수를 출력하는 알고리즘을 작성하라. 단, 평균점수는 소수점 이하가 발생할 경우 소수점 이하를 절삭하며 국어점수가 80점 이상인 학생은 최소한 1명 이상은 있다고 가정한다.
[사용되는 변수]
Kor(100) : 100명의 학생의 점수가 기억된 배열
I : 인덱스(배열의 첨자) 변수
Cnt : 국어점수가 80점 이상인 학생의 수를 기억하는 변수
Tot : 국어점수가 80점 이상인 학생의 점수를 누적하여 총점을 기억하는 변수
Ave : 국어점수가 80점 이상인 학생의 평균점수를 기억하는 변수
기타 처리조건
평균점수는 산술평균으로 구하고 소수점 이하 절삭은 Int() 함수로 표기한다.

카운트, 누적, 산술평균 알고리즘 순서도
예제 1) 순서도

예제 1) 해설
I = 0 : 인덱스 변수 I의 초기치를 0으로 설정한 이유는 배열 A(I)에서 첨자 I의 값을 증가시키기 위한 I = I+1이 최초 배열의 값을 읽어오기 전에 처리되기 때문입니다.
Cnt = 0, Sum = 0 : 자료 건수와 총점은 수행되기 전에는 0이어야 합니다.
Ave : 총점과 자료 건수로 나눈 결과만을 기억하므로 초기화가 필요가 없습니다.
I = I+1 : 로직이 한번 수행할 때마다 배열의 첨자변수인 인덱스 변수 I를 1씩 증가시킴으로써 배열의 포인터(첨자)를 결정합니다.
A(I)>=80 : A(I)에 기억된 값이 80 이상이면 자료 건수와 총점을 구하는 구문으로 흐름을 진행하고, 80 이상이 되지 않는다면 자료 건수와 총점을 구하지 않습니다.
Cnt = Cnt+1 : 배열 A(I)의 값이 80 이상이면 자료 건수를 1증가
Tot = Tot+A(I) : 배열 A(I)에 기억된 값을 총점변수 Tot에 누적
예를 들어 인덱스 변수 I가 처음 수행하는 단계인 1인 경우 A(I)는 변수 A(1)을 의미하며 A(1)에 기억된 값이 80 이상이라면 배열에 기억된 값을 인출한 후 Tot가 기억한 값 0과 더한 후 그 값을 다시 Tot 변수에 저장시키고 계속 로직이 반복하다 A(I)의 값이 80이상이 되는 경우가 발생하면 A(I)의 값을 Tot가 가진 값과 더하여 Tot에 저장하는 방식으로 반복하면서 총점을 Tot 변수에 누적합니다.
I<100< />> : I의 값은 배열의 첨자를 결정하는 인덱스 변수로 I가 99까지 반복하여 증가되면 한 번 더 수행한 후 100이 되면 조건이 ‘거짓’이 되므로 평균을 구하는 로직으로 진행합니다.
Ave = Int(Tot/Cnt) : 국어점수가 80점 이상인 학생의 평균 구하기
국어점수가 80점 이상인 학생의 총점은 Tot 변수에 기억되어 있고 학생의 수는 Cnt 변수에 기억되어 있습니다. 곧, 평균을 기억하는 Ave변수에 (총점/자료건수)를 계산하여 int() 함수로 소수점 이하를 절삭한 후 평균점수를 기억하는 Ave변수의 값을 결정합니다. ※ int() 함수 : 소수점 이하를 절삭
예제 2) 100명의 학생에 대한 국어점수, 국사점수, 수학점수가 배열 A(100, 3)에 기억되어 있다. 세 과목의 평균점수가 80점 이상인 학생의 수와 각 과목의 총점을 구하는 순서도를 작성하라.
[사용되는 변수]
A(100, 3) : 100명의 학생에 대한 국어, 국사, 수학점수가 기억된 배열
I : 인덱스(배열의 첨자) 변수
Tot : 각 학생의 (국어점수+국사점수+수학점수) 기억 변수
Ave : 각 학생의 [(국어점수+국사점수+수학점수)/3] 기억 변수
Cnt : (국어점수+국사점수+수학점수)의 평균점수가 80점 이상인 학생의 수 기억 변수
Ktot, Htot, Mtot : 국어, 국사, 수학점수의 각 과목별 모든 학생의 총점 기억 변수
배열에 기억된 자료의 형태는 아래와 같다. A(학생구분, 과목별 점수)
카운터&#44; 누적&#44; 산술평균 알고리즘 (2차원 배열- 배열 구조)
예제 2) 2차원 배열 구조

카운터&#44; 누적&#44; 산술평균 알고리즘 (2차원 배열)
예제 2) 순서도

예제 2) 해설
I<100< />> : 배열의 첨자를 결정하는 인덱스 변수 I의 값이 로직이 수행될 때마다 1씩 증가하여 100이 되면 출력 쪽으로 흐름을 결정하는 판단 구문
I = I+1 : 배열의 첨자를 결정하는 인덱스 변수 I를 로직이 반복할 때마다 1에서 100까지 1씩 증가시키는 처리 구문
Tot = A(I, 1)+A(I, 2)+A(I, 3) : 인덱스 변수 I에 해당하는 국어점수, 국사점수, 영어점수를 더하여 Tot 변수에 저장시키는 처리 구문
제시된 문제에 해당하는 데이터가 저장된 2차원 배열(행, 열)에서 행은 각 학생을 구분하는 번호를 정의하고 열은 각 학생의 국어, 국사, 수학점수를 정의합니다.
Ave = Tot/3 : 평균점수를 결정하는 처리 구문
Ave>=80 : 평균점수가 80점 이상인 경우 학생의 수를 구하는 Cnt = Cnt+1 처리 구문으로 진행하고 80미만인 경우에는 자료 건수를 구하는 구문을 처리하지 않는 방향으로 흐름을 결정하는 판단 구문
Cnt = Cnt+1 : 평균점수가 80이상인 학생의수를 구하는 처리 구문
Ktot = Ktot+A(I,1) : 국어점수를 누적
Htot = Htot+A(I,2) : 국사점수를 누적
Mtot = Mtot+A(I,3) : 수학점수를 누적