학교 1학년 2학기 수행평가에 출제된 코딩테스트 문제입니다.
공부 목적으로 다시 한 번 풀어봅니다!!
❓문제 설명
학생 수를 입력받아 한 학급의 성적을 처리하는 프로그램을 작성하시오.
※ 아래 입출력 예시를 참고해주세요!
⚠️ 조건 및 입출력 예시
조건 1. 학생별 점수 3개를 입력받아 2차원 배열에 저장한다.
조건 2. 각 학생은 시험을 3번 본 다음 그 중 가장 좋은 점수(최고점)를 가지고 평점을 계산한다.
조건 3. 최고점이 90점 이상이면 5, 80점 이상이면 4, 70점 이상이면 3, 60점 이상이면 2, 그 나머지는 1로 한다.
조건 4. 한 학급의 인원수(학생수)는 입력을 받는다.
조건 5. 100보다 크거나 0보다 작은 수 입력하면 ‘다시 입력하세요==> ’ 메시지 출력!
입출력 예시 ▼

✏️ 직접 구현한 코드
코드 작성 github (2/27 커밋부터)▼
https://github.com/ezi-s-u/SchoolCodingTest
import java.util.Scanner;
public class suhaeng2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("학생수 입력 : ");
int per = sc.nextInt();
System.out.println("");
int score[][] = new int[per][3];
int max_sco[] = new int[per];
for(int i = 0; i < per; i++) {
for(int j = 0; j < score[i].length; j++) {
System.out.print("점수 "+(j+1)+" 입력 : ");
score[i][j] = sc.nextInt();
while(score[i][j]>100 || score[i][j]<0) {
System.out.print("다시 입력하세요==> 점수 "+(j+1)+" 입력 : ");
score[i][j] = sc.nextInt();
}
if(score[i][j] > max_sco[i]) {
max_sco[i] = score[i][j];
}
}
System.out.println("");
}
System.out.println("");
System.out.println("=======================================");
System.out.println("순번 점수1 점수2 점수3 최고점 평점");
for(int i = 0; i < per; i++) {
System.out.print(" "+(i+1)+" "); // 순번
System.out.printf("%4d %4d %4d %3d",score[i][0],score[i][1],score[i][2],max_sco[i]); // 점수와 최고점
switch(max_sco[i]/10) { // 평점
case 9: case 10: System.out.println(" "+5); break;
case 8: System.out.println(" "+4); break;
case 7: System.out.println(" "+3); break;
case 6: System.out.println(" "+2); break;
default : System.out.println(" "+1);
}
}
System.out.println("=======================================");
}
}
🗣️ 코드 설명
- Scanner을 import하고 생성해주었습니다.
- 학생수를 입력받을 per을 생성하고, 점수 3개를 저장할 score배열, 학생별로 최고점을 저장할 max_sco배열을 생성해주었습니다.
- 이중 for문을 이용하여 학생별로 3개의 점수와 최고점을 배열에 저장했습니다. 또 중간에 조건5를 충족하기위해 100보다 크거나 0보다 작은 수 입력하면 ‘다시 입력하세요==> ’ 메시지 출력하는 whlie문을 추가했습니다.
- 마지막에는 for문을 활용해 순번과 점수들, 최고점 그리고 평점을 출력했습니다. 평점을 출력할 때는 switch case문을 이용해 조건3을 충족시켰습니다.
💦 어려웠던 점
2차원 배열을 사용하면서 for문이 많아졌는데 그 순서를 생각하며 코드를 짜는 것이 헷갈렸고, 출력 자리를 지정하는 것도 힘들었다. 하지만 이 문제를 통해 2차원 배열을 다시 공부할 수 있어 좋았다.
'코딩테스트 회고록 > 코테_Java' 카테고리의 다른 글
[JAVA] 학교 수행평가 코딩테스트 - 정수 10개를 배열에 저장 후 가장 큰 수 출력 (0) | 2023.02.28 |
---|---|
[JAVA] 프로그래머스 - k의 개수 (1) | 2023.02.28 |
[JAVA] 프로그래머스 - 합성수 찾기 (0) | 2023.02.27 |
[JAVA] 프로그래머스 - 직각삼각형 출력하기 (0) | 2023.02.24 |
[JAVA] 프로그래머스 - 주사위의 개수 (0) | 2023.02.23 |