[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가지 입력 방식으로 결과를 출력하고자 한다.
- Scanner 클래스 사용
- 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()
메서드를 사용한다.
- 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 성능 비교
입력의 경우 확실히 Scanner 보다는 BufferedReader 가 빠른 것을 볼 수 있다.
관련 페이지
Leave a comment