[BaekJoon] 11382번 - 꼬마 정민 (java)

1. 문제

👉 문제 바로가기

- 조건

시간 제한 메모리 제한
1초 512MB


- 문제

꼬마 정민이는 이제 A + B 정도는 쉽게 계산할 수 있다. 이제 A + B + C를 계산할 차례이다!

- 입력

첫 번째 줄에 A, B, C (1 ≤ A, B, C ≤ 10^12)이 공백을 사이에 두고 주어진다.

- 출력

A+B+C의 값을 출력한다.

- 예제

  입력      출력  
77 77 7777 7931





2. 풀이

이 문제에서 중요한 포인트는 입력값의 범위가 1 ~ 1012이기 때문에 int형 대신 long형을 사용해야 한다는 점이다.

  자료형   default    표현범위  
int형 0 -2,147,483,648 ~ 2,147,483,647
long형 0L -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807


long 변수에 숫자를 대입할 때는 위의 default 값과 같이 숫자 뒤에 L접미사를 붙여주어야 에러가 발생하지 않는다.

아래의 풀이에서는 L접미사 대신 nextLong()Long.parseLong() 메서드를 사용해서 long형임을 알려준다.


2가지 입력 방식으로 결과를 출력하고자 한다.

  1. Scanner 클래스 사용
  2. BufferedReader 클래스 사용


- 1. Scanner 클래스 사용

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
   
        long A = sc.nextLong();
        long B = sc.nextLong();
        long C = sc.nextLong();
        
        System.out.println(A+B+C);
        
        sc.close();
    }
}

위와같이 객체를 생성할 때, Scanner(System.in) 에서 System.in 은 입력한 값을 Byte 단위로 읽는 것을 뜻한다.

입력값의 범위가 int형의 표현범위를 넘어서기 때문에, nextLong() 메서드를 사용한다.

Scanner에 대해 더 자세히 알고싶다면 여기를 눌러보자





- 2. BufferedReader 클래스 사용

BufferedReader는 readLine() 메서드를 사용해 한 행을 전부 읽는다.
이를 공백단위로 분리해야 하는데, 두가지 분리 방법으로 문제를 풀어보자.



     ① StringTokenizer 클래스를 사용하여 분리해주는 방법
     ② split() 을 사용하는 방법



① StringTokenizer 클래스를 이용

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

import java.util.StringTokenizer;

public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer str = new StringTokenizer(br.readLine());
        
        long A = Long.parseLong(str.nextToken());
        long B = Long.parseLong(str.nextToken());
        long C = Long.parseLong(str.nextToken());
        
        System.out.println(A+B+C);
        
        br.close();
    }
}

str.nextToken()은 한 줄로 받은 데이터를 공백 단위로 끊어 문자열로 반환한다.
그래서 Long.parseLong()을 사용해 문자열을 Long형으로 변환시킨다.




② split() 을 사용

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        String[] arr = br.readLine().split(" ");
        
        long A = Long.parseLong(arr[0]);
        long B = Long.parseLong(arr[1]);
        long C = Long.parseLong(arr[2]);
        
        System.out.println(A+B+C);
        
        br.close();
    }
}

br.readLine() 을 통해 읽어온 문자열을 split(" ") 하여 공백 단위로 나눠준 뒤 String 배열에 순서대로 저장한다.

Long.parseLong()을 사용해 string 배열에 저장된 값을 각각 long형으로 변환시킨다.



[여기서 잠깐!]

BufferedReader 클래스에 대해 더 알아보고 싶으면 여기를 클릭하면 된다.





3. Scanner VS BufferedReader 성능 비교

img

입력의 경우 확실히 Scanner 보다는 BufferedReader 가 빠른 것을 볼 수 있다.





관련 페이지




Categories:

Updated:

Leave a comment