Scanner에서 숫자와 문자를 구별해서 어떻게 작동하는가?
Scanner 클래스는 다양한 타입의 입력을 처리할 수 있습니다.
즉, 숫자와 문자를 구별하여 입력받을 수 있습니다.
이는 Scanner 클래스가 다양한 타입에 대한 입력 처리 메서드를 제공하기 때문입니다.
다음은 Scanner를 사용하여 숫자와 문자를 구별하여 입력받는 예제 코드입니다:
java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("숫자를 입력하세요:");
int number = sc.nextInt(); // 숫자 입력
System.out.println("문자를 입력하세요:");
String str = sc.next(); // 문자 입력
System.out.println("입력받은 숫자는 " + number + "이고, 입력받은 문자는 " + str + "입니다.");
}
}
이 코드는 먼저 사용자로부터 숫자를 입력받고, 그 다음으로 문자를 입력받습니다.
nextInt() 메소드를메서드를 사용하여 숫자를, next() 메서드를 사용하여 문자를 입력받습니다.
수열이란 무엇인가?
'주어진 수열’이란 문제에서 미리 정의된 숫자의 나열을 의미합니다.
이는 배열이나 리스트와 같은 데이터 구조를 사용하여 표현될 수 있습니다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " "); 란 무엇인가?
BufferedReader: 자바에서 텍스트 데이터를 읽어들일 때 사용하는 클래스입니다. InputStreamReader 혹은 FileReader 등 다른 Reader 클래스와 함께 사용되며, 버퍼를 활용하여 한번에 대량의 데이터를 읽어 들여 성능을 향상합니다.
java
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
위 코드에서는 System.in 즉, 표준 입력 스트림을 InputStreamReader로 읽어들이고, 이를 다시 BufferedReader로 감싸서 사용합니다. 이렇게 하면 한 번에 여러 문자를 읽어 들일 수 있어 입력 속도가 빨라집니다.
InputStreamReader:
바이트 단위로 읽어들인 데이터를 문자 단위로 변환해 주는 클래스입니다.
InputStream을 Reader로 변환해주는 브리지 역할을 합니다.
StringTokenizer: 문자열을 구분자를 기준으로 나누는 클래스입니다. nextToken() 메서드를 사용하여 다음 토큰(여기서는 구분자로 나눠진 문자열의 한 부분)을 가져올 수 있습니다.
java
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
위 코드에서는 br.readLine()으로 한 줄의 문자열을 읽어들이고, 이를 공백(" ")을 기준으로 나눕니다. 이후 st.nextToken()을 통해 나눠진 토큰을 하나씩 가져올 수 있습니다.
System.in --> InputStreamReader --> BufferedReader --> String (readLine()) --> StringTokenizer --> String tokens
즉, System.in에서 입력되는 바이트 단위의 데이터를 문자 단위로 변환한 뒤, 이를 버퍼를 통해 한번에 읽어 들인다. 그리고 한 줄을 읽어 들여 공백을 기준으로 나누고, 이를 순차적으로 처리한다는 것을 볼 수 있습니다.
BufferedReader와 Scanner 에서 왜 BufferedReader를 사용했는가?
자바에서 BufferedReader와 Scanner는 모두 입력을 읽는 데 사용되지만,
각각의 특성과 사용법이 다릅니다12.
BufferedReader
BufferedReader는 문자, 배열 및 행을 효율적으로 읽을 수 있도록 문자 입력 스트림에서 버퍼링을 제공합니다 1.
BufferedReader는 큰 데이터를 읽을 때 더 빠르며, 효율적입니다1.
BufferedReader는 동기화되어 있어 멀티스레드 환경에서 안전합니다1.
BufferedReader는 단순히 문자열을 읽는 것에 초점을 맞추고 있습니다1.
Scanner
Scanner는 입력 스트림에서 토큰을 구문 분석하는 데 사용됩니다1.
Scanner는 다양한 타입의 입력(정수, 실수, 문자열 등)을 처리하는 메서드를 제공합니다 1.
Scanner는 동기화되어 있지 않아 멀티스레드 환경에서는 주의가 필요합니다1.
Scanner는 입력을 구문 분석하는 것에 초점을 맞추고 있습니다1.
따라서, 이 문제에서는 입력의 크기가 크고(최대 10^6), 각 숫자를 개별적으로 처리해야 하므로 BufferedReader를 사용하는 것이 더 효율적입니다. 또한,
BufferedReader를 사용하면 readLine() 메소드를 통해 한 줄의 입력을 한 번에 읽을 수 있으므로 코드가 더 간결해집니다.
반면에 Scanner를 사용하면 nextInt() 메소드를 통해 각 숫자를 개별적으로 읽어야 하므로 코드가 더 복잡해질 수 있습니다. 또한, Scanner는 내부적으로 정규 표현식을 사용하여 입력을 구문 분석하므로 BufferedReader보다 느릴 수 있습니다 1.
BufferedReader와 Scanner의 사용법
BufferedReader와 Scanner의 사용법
BufferedReader 사용 예제
java
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("문자열을 입력하세요:");
String line = br.readLine();
System.out.println("입력받은 문자열: " + line);
br.close();
}
}
위 코드는 사용자로부터 한 줄의 문자열을 입력받아 출력하는 간단한 프로그램입니다.
BufferedReader의 readLine() 메서드를 사용하여 한 번에 한 줄씩 읽어옵니다.
Scanner 사용 예제
java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("정수를 입력하세요:");
int number = scanner.nextInt();
System.out.println("입력받은 정수: " + number);
scanner.close();
}
}
위 코드는 사용자로부터 정수를 입력받아 출력하는 간단한 프로그램입니다.
Scanner의 nextInt() 메소드를 사용하여 정수를 읽어옵니다.
BufferedReader:
System.in --> InputStreamReader --> BufferedReader --> String (readLine())
Scanner:
System.in --> Scanner --> int (nextInt()) / String (nextLine()) / double (nextDouble()) / etc.
즉, BufferedReader는 문자열을 한 줄씩 읽어오는 데 사용되고, Scanner는 다양한 타입의 입력을 읽어오는데 사용됩니다. 따라서 입력의 형태와 크기에 따라 적절한 클래스를 선택하면 됩니다.
'컴퓨터공부 > 책리뷰 & book review' 카테고리의 다른 글
Do it! 알고리즘 입문: 자바 편 (25)[책리뷰 & Book review] (0) | 2024.02.05 |
---|---|
Do it! 알고리즘 입문: 자바 편 (24)[책리뷰 & Book review] (1) | 2024.02.05 |
Do it! 알고리즘 입문: 자바 편 (21)[책리뷰 & Book review] (3) | 2024.02.04 |
Do it! 알고리즘 입문: 자바 편 (20)[책리뷰 & Book review] (1) | 2024.02.04 |
댓글