PTA에서 Java 프로그래밍 문제 출제 방법

Java 프로그래밍 문제를 처음 출제하는 많은 교육자들이 PTA(프로그래밍 교조 시스템)에서 Java가 입력을 어떻게 처리하는지 알지 못합니다. 이에 참고할 수 있도록 이 글을 작성했습니다.

입력 처리 방식에 따라 여러 종류의 프로그래밍 문제가 있습니다:

유형 1: 고정된 수량의 입력

콘솔에서 **두 개**의 숫자를 읽어서 그 합을 출력하는 프로그램을 작성하세요.

이 문제에 대한 다음과 같은 두 가지 예시 입력/출력이 가능합니다:

예시 입력/출력 1:
입력:
1      2
출력:
3

또는

예시 입력/출력 2:
입력:
1
2
출력:
3

주의사항:

  1. 예시 입력은 입력 파일(예: 0.in)의 내용을 나타냅니다. 일반적으로 이 파일의 마지막에는 줄 바꿈 문자가 포함되어야 합니다. 예를 들어, 1 2 뒤에는 줄 바꿈이 있어야 합니다.
  2. 예시 출력은 출력 파일(예: 0.out)의 내용을 나타냅니다.
  3. 파일은 반드시 UTF-8 인코딩을 사용해야 하고, 줄 바꿈은 Linux 형식을 사용해야 합니다. Notepad++ 같은 전문 텍스트 편집기를 사용하면 됩니다.
  4. 입력 파일, 출력 파일, 학생이 제출하는 코드에는 중국어를 사용하지 마세요.

위 문제에 대한 몇 가지 해결 방법:

해결 방법 1:

import java.util.Scanner;

public class SumCalculator {
    public static void main(String[] args) {
        Scanner inputScanner = new Scanner(System.in);
        int firstNumber = inputScanner.nextInt(); // 문자열을 int로 직접 변환
        int secondNumber = inputScanner.nextInt();
        System.out.println(firstNumber + secondNumber);
        inputScanner.close();
    }
}

해결 방법 2:

import java.util.Scanner;

public class SumCalculator {
    public static void main(String[] args) {
        Scanner inputScanner = new Scanner(System.in);
        int firstNumber = Integer.parseInt(inputScanner.next());  // 각 단위를 먼저 문자열로 읽은 후 int로 변환
        int secondNumber = Integer.parseInt(inputScanner.next());
        System.out.println(firstNumber + secondNumber);
        inputScanner.close();
    }
}

next() 메소드는 자동으로 공백, 여러 공백, 빈 줄, 줄 바꿈을 건너뜁니다. 이 방법을 사용하는 것을 권장합니다.

해결 방법 3 (예시 입력/출력 2에 적용, 각 줄에 하나의 숫자만 있는 경우):

import java.util.Scanner;

public class SumCalculator {
    public static void main(String[] args) {
        Scanner inputScanner = new Scanner(System.in);
        int firstNumber = Integer.parseInt(inputScanner.nextLine()); // nextLine은 전체 줄을 처리 단위로 사용
        int secondNumber = Integer.parseInt(inputScanner.nextLine());
        System.out.println(firstNumber + secondNumber);
        inputScanner.close();
    }
}

주의사항:

  1. 위 모든 처리 방법에서는 먼저 import java.util.Scanner를 포함해야 합니다.
  2. 코드에서 nextLine()next(), nextInt() 등 다른 메소드와 혼합 사용하지 마세요. 그렇게 하면 nextLine()이 줄 바꿈 문자만 읽게 될 수 있습니다.

유형 2: 가변 수량의 입력

콘솔에서 **여러 개**의 정수를 읽어서 그 합을 출력하는 프로그램을 작성하세요.

이 문제에 대한 다음과 같은 두 가지 예시 입력/출력이 가능합니다:

예시 입력/출력 1:
입력:
1      2  3 4    5 6       7
   8  9  10
출력:
55

또는

예시 입력/출력 2:
입력:
1
2
3
4
5
6
7
8
9
10
출력:
55

해결 방법 1: 위 두 가지 입력 모두 처리 가능

import java.util.Scanner;

public class VariableSum {
    public static void main(String[] args) {
        Scanner inputScanner = new Scanner(System.in);
        int totalSum = 0;
        while(inputScanner.hasNextInt()) {   // inputScanner.hasNext()로 대체 가능
            totalSum += inputScanner.nextInt();     // Integer.parseInt(inputScanner.next())로 대체 가능
        }
        System.out.println(totalSum);
        inputScanner.close();
    }
}

해결 방법 2: 예시 입력/출력 2에 적용

import java.util.Scanner;

public class LineSum {
    public static void main(String[] args) {
        Scanner inputScanner = new Scanner(System.in);
        int totalSum = 0;
        while(inputScanner.hasNextLine()) {   // inputScanner.hasNext()로 대체 가능
            totalSum += Integer.parseInt(inputScanner.nextLine());     // Integer.parseInt(inputScanner.next())로 대체 가능
        }
        System.out.println(totalSum);
        inputScanner.close();
    }
}

주의사항:

  1. hasNextInt()를 사용할 때 Eclipse에서 테스트하면 프로그램이 중지되지 않을 수 있습니다. 하지만 PTA에서는 정상적으로 제출 가능합니다.
  2. 일반적으로 hasNext()next(), hasNextInt()nextInt(), hasNextLine()nextLine()을 함께 사용하는 것이 좋습니다. 다른 조합들도 마찬가지입니다.

유형 3: 다양한 데이터 타입이 포함된 입력

만약 문제의 예시 입력에 숫자, 문자열, 부울(Boolean) 타입의 데이터가 구분되어 처리되어야 하고, 이 데이터들이 규칙적으로 나타나지 않는다면, Scanner의 next() 메소드를 사용하여 먼저 문자열로 변환한 후 처리하는 것을 시도해볼 수 있습니다.

PTA 관련 다른 글:

PTA에서 Java 프로그램 제출을 위한 몇 가지 팁 PTA 공유 코드 - Java

태그: java PTA 프로그래밍 문제 입력 처리 스캐너

6월 4일 16:33에 게시됨