Java 프로그래밍 문제를 처음 출제하는 많은 교육자들이 PTA(프로그래밍 교조 시스템)에서 Java가 입력을 어떻게 처리하는지 알지 못합니다. 이에 참고할 수 있도록 이 글을 작성했습니다.
입력 처리 방식에 따라 여러 종류의 프로그래밍 문제가 있습니다:
유형 1: 고정된 수량의 입력
콘솔에서 **두 개**의 숫자를 읽어서 그 합을 출력하는 프로그램을 작성하세요.
이 문제에 대한 다음과 같은 두 가지 예시 입력/출력이 가능합니다:
예시 입력/출력 1:
입력:
1 2
출력:
3
또는
예시 입력/출력 2:
입력:
1
2
출력:
3
주의사항:
- 예시 입력은 입력 파일(예:
0.in)의 내용을 나타냅니다. 일반적으로 이 파일의 마지막에는 줄 바꿈 문자가 포함되어야 합니다. 예를 들어, 1 2 뒤에는 줄 바꿈이 있어야 합니다. - 예시 출력은 출력 파일(예:
0.out)의 내용을 나타냅니다. - 파일은 반드시
UTF-8인코딩을 사용해야 하고, 줄 바꿈은 Linux 형식을 사용해야 합니다. Notepad++ 같은 전문 텍스트 편집기를 사용하면 됩니다. - 입력 파일, 출력 파일, 학생이 제출하는 코드에는 중국어를 사용하지 마세요.
위 문제에 대한 몇 가지 해결 방법:
해결 방법 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();
}
}
주의사항:
- 위 모든 처리 방법에서는 먼저
import java.util.Scanner를 포함해야 합니다. - 코드에서
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();
}
}
주의사항:
hasNextInt()를 사용할 때 Eclipse에서 테스트하면 프로그램이 중지되지 않을 수 있습니다. 하지만 PTA에서는 정상적으로 제출 가능합니다.- 일반적으로
hasNext()와next(),hasNextInt()와nextInt(),hasNextLine()과nextLine()을 함께 사용하는 것이 좋습니다. 다른 조합들도 마찬가지입니다.
유형 3: 다양한 데이터 타입이 포함된 입력
만약 문제의 예시 입력에 숫자, 문자열, 부울(Boolean) 타입의 데이터가 구분되어 처리되어야 하고, 이 데이터들이 규칙적으로 나타나지 않는다면, Scanner의 next() 메소드를 사용하여 먼저 문자열로 변환한 후 처리하는 것을 시도해볼 수 있습니다.
PTA 관련 다른 글:
PTA에서 Java 프로그램 제출을 위한 몇 가지 팁 PTA 공유 코드 - Java