[Java] Scanner() 정리 및 PS에서의 Scanner

Jae_0·2023년 2월 21일
0
post-thumbnail

Scanner 클래스


Java에서 자주 사용하게 되는 Scanner 클래스에 관한
정리 내용이다.

  • Scanner 클래스
  • Scanner 클래스의 사용법 및 기능
  • 백준 및 PS에서의 Scanner

1. Scanner 클래스

자바를 공부하며 콘솔에서 키보드 입력값을 받을 때
가장 먼저 공부하게 되고, 많이 사용하는 클래스는
Scanner 클래스이다. C언어의 scanf, 파이썬의 input과 같은 기능을 한다.

  • 기본적인 데이터 타입을 모두 입력받을 수 있다.
  • token(공백, 개행, 탭)을 기준으로 입력 받는다.

2. Scanner 클래스의 사용법 및 기능

import java.util.Scanner; // java.util의 Scanner 클래스 import
import java.util.* // java.util에 있는 모든 클래스를 import

Scanner는 java.util에 속해 있어 import를 해줘야 사용이 가능하다.

메소드기능
next()String을 읽는다. 토큰(token)을 기준으로 읽는다.
nextLine()String을 읽는다. 개행(Enter)을 기준으로 읽는다.
nextInt()int를 읽는다.
nextBoolean()boolean을 읽는다.
nextByte()byte를 읽는다.
nextShort()short를 읽는다.
nextLong()Long을 읽는다.
nextFloat()float을 읽는다.
nextDouble()Double을 읽는다.

주로 사용하는 메소드를 볼드 처리 하였다.

주의해야 할 점


공백문자는 사라지지 않는다.

어떤 값을 입력 받을 때, 공백문자까지 버퍼에 저장한다.

즉, Spacebar, Enter, Tab 역시 입력값과 함께 버퍼에 저장 되고,
해당 공백은 다른 곳에서 읽어들이기 전까지 버퍼에 남아있다는 것이다.

nextLine()을 제외한 나머지 메소드들은

  • 토큰(token) 단위로 읽는다.
  • 입력값을 읽을 때 공백문자를 제외해서 읽어들인다.
  • 리턴값 역시 공백문자를 제외한 값을 return한다.

3. 백준 및 PS에서의 Scanner

백준에서 단계별로 풀어보기를 하던 중 가장 앞부분에
입력 받기 문제가 나와 정리할겸 예제를 작성 하였다.

백준 1330 두 수 비교하기

백준 1330 문제 바로가기

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in); // Scanner 객체 생성
        int a = sc.nextInt();
        int b = sc.nextInt();

        if (a > b){
            System.out.println(">");
        } else if (a < b){
            System.out.println(("<"));
        } else {
            System.out.println("==");
        }
    }
}

PS에서의 Scanner

Scanner 클래스는 간편하고, 이해하기 쉬우며 직관적이다.
그러나 입출력을 할 때, Scanner와 System.out.println을
사용하면 같은 로직일지라도 시간이 오래 걸리거나 혹은
시간 초과를 경험 할 수도 있다.

특히 본인은 백준 15552번 빠른 A+B 문제에서 이전에
배웠던 대로 Scanner 클래스를 사용 하였지만 시간초과를
맛보게 되었다.

이를 해결하기 위해 BufferedReaderdBufferedWriter
사용해야 한다는 것을 알게 되었다.

위에 관한 내용을 계속 작성하기에는 너무 길어지기에
다음 글에 이어 적겠다.


참고

profile
기록하며 꾸준히 성장하는 코딩 공부

0개의 댓글