풀스택 백엔드 2026.04.22

syyu21b·2026년 4월 26일

풀스택 - 백엔드

목록 보기
6/49
post-thumbnail

[SECTION06-00. 종합 테스트 문제]

📝 문제 요약

지금까지 배운 기본 타입, 배열, 제어문(if, for, while, switch) 만 사용해서 간단한 학생 정보 관리 프로그램을 작성해 보세요.

학생 정보:

  • 이름: String
  • 나이: int
  • 점수: int

학생은 최대 3명까지 저장할 수 있습니다.

3명을 다 등록한 상태에서 또 등록을 시도하면

"더 이상 등록할 수 없습니다." 라는 메시지를 출력해야 합니다.


📌 요구 사항

1. 저장 장소 데이터 구조 (배열만 사용)

다음과 같이 서로 관련된 배열 3개를 사용해서 학생 정보를 저장합니다.

  • String[] names = new String[3]; // 이름들
  • int[] ages = new int[3]; // 나이들
  • int[] scores = new int[3]; // 점수들
  • int studentCount = 0; // 현재 등록된 학생 수

한 학생의 정보는 names[i], ages[i], scores[i]가 한 세트입니다.

학생 번호는 배열 인덱스 + 1 (i + 1) 로 생각합니다.


2. 메뉴 기능

프로그램 실행 후, 아래와 같은 메뉴를 계속 보여줍니다.

=== 학생 관리 프로그램 ===
0. 학생 등록
1. 학생 목록 출력
2. 학생 검색(번호로 검색)
3. 학생 정보 수정
9. 종료
메뉴를 선택하세요:

각 메뉴의 동작은 다음과 같습니다.


0. 학생 등록

  • 학생 수(studentCount)가 4명 미만일 때만 등록 가능
    • 이름, 나이, 점수를 입력받아 다음 인덱스에 저장
    • studentCount를 1 증가
  • 이미 3명이 등록된 상태면
    • 더 이상 학생을 등록할 수 없습니다. 출력

1. 학생 목록 출력

  • 현재 등록된 모든 학생 정보를 다음 형식으로 출력
번호   이름   나이   점수
1     홍길동  20     90
2     아무개  22     85
...
  • 등록된 학생이 하나도 없으면 등록된 학생이 없습니다. 출력

2. 학생 검색 (번호로 검색)

  • “학생 번호”를 입력받는다. (1번 ~ 현재 학생 수)
  • 번호가 유효하면 해당 학생의 정보를 1명만 출력
  • 범위를 벗어난 번호를 입력하면 해당 학생은 존재하지 않습니다. 출력

3. 학생 정보 수정

  • 수정할 “학생 번호”를 입력받는다.
  • 번호가 유효하면
    • 새 이름, 새 나이, 새 점수를 입력받아 해당 위치의 값을 모두 변경
  • 범위를 벗어난 번호를 입력하면 해당 학생은 존재하지 않습니다. 출력

9. 종료

  • 9를 입력하면 프로그램을 종료합니다.

🎯 학습 포인트

  • 배열을 이용한 여러 데이터 저장
  • 인덱스와 학생 번호의 관계 이해 (i ↔ i+1)
  • if, switch, while, for 제어문 복습
  • 삭제 시 배열 요소를 앞으로 당기는 로직 연습

📝 정답

import java.util.Scanner;

public class Exam01 {
public static void main(String[] args) {

    Scanner scn = new Scanner(System.in);

    final int STUDENT_MAX_COUNT = 3;

    String[] names = new String[STUDENT_MAX_COUNT]; // 이름을 저장할 배열
    int[] ages = new int[STUDENT_MAX_COUNT]; // 나이를 저장할 배열
    int[] scores = new int[STUDENT_MAX_COUNT]; // 점수를 저장할 배열

    int studentCount = 0; // 현재 등록된 학생 수

    while(true) {
        System.out.println("=== 학생 관리 프로그램 ===");
        System.out.println("0. 학생 등록");
        System.out.println("1. 학생 목록");
        System.out.println("2. 학생 검색");
        System.out.println("3. 학생 수정");
        System.out.println("9. 프로그램 종료\n");
        System.out.print("명령어:");
        int cmd = scn.nextInt();
        scn.nextLine();

        switch (cmd) {
            case 0:
                if (studentCount == STUDENT_MAX_COUNT) {
                    System.out.println("더 이상 학생을 등록할 수 없습니다.");
                }
                System.out.println("학생 등록을 시작합니다.\n");
                System.out.print("이름:");
                String name = scn.nextLine();
                System.out.print("나이:");
                int age = scn.nextInt();
                System.out.print("점수:");
                int score = scn.nextInt();

                names[studentCount] = name;
                ages[studentCount] = age;
                scores[studentCount] = score;

                studentCount++;

                System.out.println("\n학생 등록이 완료되었습니다.\n");

                break;
            case 1:
                System.out.println("\n학생 목록입니다.\n");

                for (int i = 0; i < STUDENT_MAX_COUNT; i++) {
                    if (names[i] != null) {
                        System.out.println((i + 1) + "번: " + names[i]);
                    }
                }
                break;
            case 2:
                System.out.println("\n학생을 검색입니다.\n");
                System.out.print("검색할 학생 번호 입력:");
                // 검색할 학생 번호
                int searchNum = scn.nextInt();

                if (searchNum > studentCount) {
                    System.out.println("해당 학생은 존재하지 않습니다.");
                    continue;
                }

                scn.nextLine();
                // 검색할 학생의 실제 인덱스
                int searchIdx = searchNum - 1;

                System.out.println("\n=== 검색한 학생 정보 ===");
                System.out.println("이름: " + names[searchIdx]);
                System.out.println("나이: " + ages[searchIdx] + "살");
                System.out.println("점수: " + scores[searchIdx] + "점\n");

                break;
            case 3:
                System.out.println("\n학생을 수정합니다.\n");
                System.out.print("수정할 학생 번호 입력:");
                // 수정할 학생 번호
                int modifyNum = scn.nextInt();

                if (modifyNum > studentCount) {
                    System.out.println("해당 학생은 존재하지 않습니다.");
                    continue;
                }

                scn.nextLine();
                // 수정할 학생의 실제 인덱스
                int modifyIdx = modifyNum - 1;

                System.out.print("수정할 이름:");
                String modifyName = scn.nextLine();
                System.out.print("수정할 나이:");
                int modifyAge = scn.nextInt();
                System.out.print("수정할 점수:");
                int modifyScore = scn.nextInt();

                names[modifyIdx] = modifyName;
                ages[modifyIdx] = modifyAge;
                scores[modifyIdx] = modifyScore;

                System.out.println("\n" + modifyNum + "번째 학생이 수정이 완료되었습니다.\n");

                break;
            case 9:
                System.out.println("프로그램을 종료합니다.");
                return;
            default:
                System.out.println("존재하지 않는 명령어입니다.");
        }
    }
}

}

0개의 댓글