본문 바로가기
프로그래밍 기초/Java Festival

[Java Festival] 27. Java 시험 문제 채점하기

by 제이투더문 2024. 7. 5.

 

 안녕하세요, 작가 J입니다. 이번에는 Java 시험 문제를 채점하는 프로그램을 작성해 보겠습니다. 각 문제마다 O 또는 X로 표시되는데, O는 점수가 누적되는 방식으로 채점됩니다. 예를 들어, "oooxoo"라는 표시가 있다면 순서대로 1 + 2 + 3 + 0 + 1 + 2 = 9점으로 총점이 계산됩니다.

 

[Java Festival 27] Java 시험 문제 채점하기

스마트미디어인재개발원의 인쌤이 Java시험문제를 채점하고 있다.

문제마다 'o' 또는 'x'로 표시가 되어 있는데 점수를 매기는 방식이 특이하다.

'o'는 점수가 누적되는 방식으로 채점되는데 이전부터 자신을 포함한 연속된

'o'의 개수 만큼의 점수로 채점이 됩니다. 예를 들어 'oooxoo'라는 표시가

있다면 순서대로 1+2+3+0+1+2=9 으로 총점이 계산됩니다. 학생이 푼 시험지에

정답, 오답 여부가 표시되어 있을 때 총점을 구하는 프로그램을 작성하세요.

 

 

코드 풀이 1: 반복문과 제어문을 활용한 기본 방식

package Ex;

import java.util.Scanner;

public class Ex27 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        // 채점 시작 메시지 출력
        System.out.println("==== 채점하기 ====");
        
        // 사용자로부터 OX 문자열 입력받기
        String[] str = sc.next().split("");
        
        // 초기 점수와 총점 설정
        int score = 1, sum = 0;
        
        // 문자열 배열 순회하며 점수 계산
        for (String string : str) {
            if (string.equals("o")) { // 'o'일 경우
                sum += score; // 현재 점수를 총점에 추가
                score++; // 점수 증가
            } else { // 'x'일 경우
                score = 1; // 점수 초기화
            }
        }
        
        // 최종 총점 출력
        System.out.println(sum);
        
        sc.close(); // Scanner 객체 닫기
    }
}

 

1. 채점 시작 메시지 출력

  • System.out.println("==== 채점하기 ====");
  • 채점을 시작한다는 메시지를 출력합니다.

 

2. 사용자 입력 받기

  • String[] str = sc.next().split("");
  • 사용자가 입력한 문자열을 배열로 변환합니다.

 

3. 초기 점수와 총점 설정

  • int score = 1, sum = 0;
  • 점수와 총점을 초기화합니다.

 

4. 문자열 배열 순회하며 점수 계산

  • for (String string : str) { ... }
  • 문자열 배열을 순회하면서 각 문자가 'o'인지 'x'인지 확인합니다.
  • if (string.equals("o")) { ... }
    • 'o'인 경우 현재 점수를 총점에 추가하고 점수를 증가시킵니다.
  • else { ... }
    • 'x'인 경우 점수를 1로 초기화합니다.

 

5. 최종 총점 출력

  • System.out.println(sum);
  • 최종 계산된 총점을 출력합니다.

 

6. Scanner 객체 닫기

  • sc.close();
  • Scanner 객체를 닫습니다.

 

코드 풀이 2: 배열을 사용한 방식

package Ex;

import java.util.Scanner;

public class Ex27Alternative {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        // 채점 시작 메시지 출력
        System.out.println("==== 채점하기 ====");
        
        // 사용자로부터 OX 문자열 입력받기
        String input = sc.next();
        
        // 초기 점수와 총점 설정
        int sum = 0;
        int[] scores = new int[input.length()];
        
        // 문자열 순회하며 점수 계산
        for (int i = 0; i < input.length(); i++) {
            if (input.charAt(i) == 'o') { // 'o'일 경우
                scores[i] = (i == 0) ? 1 : scores[i - 1] + 1; // 현재 점수를 계산
            } else { // 'x'일 경우
                scores[i] = 0; // 점수는 0
            }
        }
        
        // 총점 계산
        for (int score : scores) {
            sum += score;
        }
        
        // 최종 총점 출력
        System.out.println(sum);
        
        sc.close(); // Scanner 객체 닫기
    }
}

 

 

 

1. 초기 점수와 총점 설정

  • int sum = 0;
  • 총점을 초기화합니다.
  • int[] scores = new int[input.length()];
  • 점수를 저장할 배열을 선언합니다.

2. 문자열 순회하며 점수 계산

  • for (int i = 0; i < input.length(); i++) { ... }
  • 문자열을 순회하면서 각 문자가 'o'인지 'x'인지 확인합니다.
  • if (input.charAt(i) == 'o') { ... }
    • 'o'인 경우 현재 점수를 계산하여 배열에 저장합니다.
  • else { ... }
    • 'x'인 경우 점수를 0으로 저장합니다.

3. 총점 계산

  • for (int score : scores) { ... }
  • 배열의 모든 점수를 합산하여 총점을 계산합니다.

 

마무리

 이번 예제에서는 Java 시험 문제를 채점하는 프로그램을 두 가지 방식으로 다뤄보았습니다. 첫 번째 방식은 기본적인 방식으로, 두 번째 방식은 점수를 배열에 저장하여 계산하는 방식입니다. 두 가지 방법 모두 이해하시는데 도움이 되길 바랍니다.

 프로그래밍을 시작하는 모든 분께 이 예제가 도움이 되길 바랍니다. 앞으로도 다양한 유형의 문제를 통해 여러분의 학습을 도울 수 있도록 노력하겠습니다. 감사합니다!