김영한님의 자바입문 강의 안에 있는 예제를 스스로 풀어본 것입니다.
첫번째 잘못된 풀이와 이유
package array.ex;
import java.util.Scanner;
public class ArrayEx7 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int[][] students = new int[4][3];
String[] subjects = {"국어", "영어", "수학"};
int sum = 0;
for (int row = 0; row < students.length; row++){
System.out.println(row+1 + "번 학생의 성적을 입력하세요!");
for (int column = 0; column < students[row].length; column++){
System.out.print(subjects[column] + "점수 :" );
students[row][column] = input.nextInt();
sum += students[row][column];
}
double average = (double) sum / students[row].length;
System.out.println(row+1 + "번 학생의 총점 : " + sum + ", 평균 : " + average);
}
}
}
# 출력 결과
1번 학생의 성적을 입력하세요 :
국어점수 :50
영어점수 :60
수학점수 :70
1번 학생의 총점 : 180, 평균 : 60.0
2번 학생의 성적을 입력하세요 :
국어점수 :30
영어점수 :90
수학점수 :89
2번 학생의 총점 : 389, 평균 : 129.66666666666666
3번 학생의 성적을 입력하세요 :
국어점수 :35
영어점수 :75
수학점수 :60
3번 학생의 총점 : 559, 평균 : 186.33333333333334
4번 학생의 성적을 입력하세요 :
국어점수 :30
영어점수 :60
수학점수 :50
4번 학생의 총점 : 699, 평균 : 233.0
문제점1) 총점과 평균이, 학생마다 따로 계산해야 하는데
전역변수로 선언 되어서 그런지 , 전체 학생의 점수를 더하고 있었다.
문제점2) 총점과 평균을 , 맨 마지막에 따로 정리해줘야 하는데(for 문을 따로 작성해야함)
각 학생의 점수를 받자마자 따로 정리해주고 있다.(프린트 위치가 잘못됨)
수정된 코드
package array.ex;
import java.util.Scanner;
public class ArrayEx7 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int[][] students = new int[4][3];
String[] subjects = {"국어", "영어", "수학"};
int[] sum = new int[4];
int[] average = new int[4];
for (int row = 0; row < students.length; row++){
System.out.println(row+1 + "번 학생의 성적을 입력하세요!");
for (int column = 0; column < students[row].length; column++){
System.out.print(subjects[column] + "점수 :" );
students[row][column] = input.nextInt();
sum[row] += students[row][column];
}
}
for (int i = 0; i < 4; i++) {
average[i] = sum[i] / 3;
System.out.println(i+1 + "번 학생의 총점 : " + sum[i] + ", 평균 : " + average[i]);
}
}
}
출력 결과
1번 학생의 성적을 입력하세요!
국어점수 :75
영어점수 :90
수학점수 :86
2번 학생의 성적을 입력하세요!
국어점수 :65
영어점수 :68
수학점수 :92
3번 학생의 성적을 입력하세요!
국어점수 :58
영어점수 :76
수학점수 :90
4번 학생의 성적을 입력하세요!
국어점수 :78
영어점수 :95
수학점수 :100
1번 학생의 총점 : 251, 평균 : 83
2번 학생의 총점 : 225, 평균 : 75
3번 학생의 총점 : 224, 평균 : 74
4번 학생의 총점 : 273, 평균 : 91
종료 코드 0(으)로 완료된 프로세스
학생 수를 입력받고, 학생 수에 따라 과목별 성적을 입력받아
성적의 총점과 평균을 출력 해보았다.
추가된 부분은, 학생 수에 해당하는 변수 n 을 선언했고
변수 n 의 크기는 students.length 로 동적으로 처리했다.
package array.ex;
import java.util.Scanner;
public class ArrayEx8 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("학생 수를 입력하세요");
int n = input.nextInt();
int[][] students = new int[n][3];
String[] subjects = {"국어", "영어", "수학"};
int[] sum = new int[4];
int[] average = new int[4];
for (int row = 0; row < students.length; row++){
System.out.println(row+1 + "번 학생의 성적을 입력하세요!");
for (int column = 0; column < students[row].length; column++){
System.out.print(subjects[column] + "점수 :" );
students[row][column] = input.nextInt();
sum[row] += students[row][column];
}
}
for (int i = 0; i < students.length; i++) {
average[i] = sum[i] / 3;
System.out.println(i+1 + "번 학생의 총점 : " + sum[i] + ", 평균 : " + average[i]);
}
}
}
2차원 배열과
1차원 배열 sum, average 를
어떤 위치에 선언 해야하는지 간단하게 알아보았습니다.
'코딩테스트' 카테고리의 다른 글
[Python][CodingTest] 정수 삼각형 - 동적 계획법(Dynamic Programmging) (0) | 2023.12.28 |
---|---|
[Java] 상품 관리 프로그램 만들기 [기초] (2) | 2023.12.21 |
[Python][CodingTest] 달리기 경주 (2) | 2023.12.20 |
[Python] 수열과 구간 쿼리 2, 3 (0) | 2023.12.15 |
[Python] 코드 처리하기 (0) | 2023.12.15 |