본문 바로가기

국비교육/국비교육 복습

Day08_array2d_Test09 : 성적의 합계, 평균, 등수 (2차원 배열의 활용) (★★)

(Q) 다음은 우리반 학생의 과목별 성적 정보입니다
이름을 제외한 나머지 정보들을 단 하나의 2차원 배열로 저장하고 싶습니다.
총점과 평균과 순위는 최초 0으로 설정한 뒤 계산을 통해서 채운 뒤 출력하려고 합니다
프로그래밍 코드를 작성하여 모든 정보를 채우고 출력하세요

 

 

 

1) 총점과 평균을 나눠서 출력

 

package day08;

public class Day08_array2d_Test09 {

	public static void main(String[] args) {
		
		// 배열
		int[][] array = new int[][] {
			{100, 90, 80, 0, 0, 0},
			{95, 92, 93, 0, 0, 0},
			{70, 95, 95, 0, 0, 0}
		};
		
		// 합계
		for(int i = 0 ; i < array.length ; i ++) {
			int sum = 0;
			for(int j = 0 ; j < array[i].length ; j ++) {
				sum += array[i][j];
			}
			array[i][3] = sum;
		}
		
		// 평균
		for(int i = 0 ; i < array.length ; i ++) {
			array[i][4] = array[i][3] / 3;
		}
		
		// 등수 출력
		for(int i = 0 ; i < array.length ; i ++) {
			int mySum = array[i][3];
			int rank = 1;
			for(int j = 0 ; j < array.length ; j ++) {
				if(mySum < array[j][3]) {
					rank ++;
				}
			}
			array[i][5] = rank;
		}
		
		// 배열 출력
		for(int i = 0 ; i < array.length ; i ++) {
			for(int j = 0 ; j < array[i].length ; j ++) {
				System.out.print(array[i][j] + " ");
			}
			System.out.println();
		}
	}
}

 

 

 

2) 총점과 평균을 한번에 출력 (총합이 변할 때 평균을 지속적으로 갱신)

 

package day08;

public class Day08_array2d_Test09_2 {

	public static void main(String[] args) {
		
		// 배열
		int[][] array = new int[][] {
			{100, 90, 80, 0, 0, 0},
			{95, 92, 93, 0, 0, 0},
			{70, 95, 95, 0, 0, 0}
		};
		
		// 합계와 평균
		for(int i = 0 ; i < array.length ; i ++) {
			int sum = 0;	// i가 바뀜과 동시에 합계 변수 초기화
			int avg = 0;	// i가 바뀜과 동시에 평균 변수 초기화
			for(int j = 0 ; j < array[i].length ; j ++) {
				sum += array[i][j];		// sum에 array[i][j]를 더하여 대입
				avg = sum / 3;			// 바뀐 sun에 대한 새로운 평균 저장 (평균 갱신)
			}
			array[i][3] = sum;
			array[i][4] = avg;
		}
		
		// 등수 출력
		for(int i = 0 ; i < array.length ; i ++) {
			int mySum = array[i][3];
			int rank = 1;
			for(int j = 0 ; j < array.length ; j ++) {
				if(mySum < array[j][3]) {
					rank ++;
				}
			}
			array[i][5] = rank;
		}
		
		// 배열 출력
		for(int i = 0 ; i < array.length ; i ++) {
			for(int j = 0 ; j < array[i].length ; j ++) {
				System.out.print(array[i][j] + " ");
			}
			System.out.println();
		}
	}
}

 

 

 

3) 전체 배열 중 점수 데이터가 있는 배열만 고려하는 방법

 

 

- 배열의 진행 범위를 array[0][0]부터 array[2][2]까지로 제한한다

- 위에서 아래 방향으로 진행하면서 특정 회차에 데이터를 특정 행의 총점칸에 '+='하여 총점을 구한다

 

package day08;

public class Day08_array2d_Test09_3 {

	public static void main(String[] args) {
		
		// 배열
		int[][] array = new int[][] {
			{100, 90, 80, 0, 0, 0},
			{95, 92, 93, 0, 0, 0},
			{70, 95, 95, 0, 0, 0}
		};
		
		// 합계와 평균
		for(int j = 0 ; j < 3 ; j ++) {
			for(int i = 0 ; i < 3 ; i ++) {
				if((i + j) % array.length == 0) {
					array[i][3] += array[i][j];
					array[i][4] = array[i][3] / 3;
				}
				else if((i + j) % array.length == 1) {
					array[i][3] += array[i][j];
					array[i][4] = array[i][3] / 3;
				}
				else if((i + j) % array.length == 2) {
					array[i][3] += array[i][j];
					array[i][4] = array[i][3] / 3;
				}
			}
		}
		
		// 등수 출력
		for(int i = 0 ; i < array.length ; i ++) {
			int mySum = array[i][3];
			int rank = 1;
			for(int j = 0 ; j < array.length ; j ++) {
				if(mySum < array[j][3]) {
					rank ++;
				}
			}
			array[i][5] = rank;
		}
		
		// 배열 출력
		for(int i = 0 ; i < array.length ; i ++) {
			for(int j = 0 ; j < array[i].length ; j ++) {
				System.out.print(array[i][j] + " ");
			}
			System.out.println();
		}
	}
}