문제 제목 : 꼬마 정민
문제
꼬마 정민이는 이제 A + B
정도는 쉽게 계산할 수 있다.
이제 A + B + C
를 계산 할 차례이다!
입력
첫 번쨰 줄에 A
, B
, C
(1 <= A
, C <= 10^12
) 가
공백을 사이에 두고 주어진다.
출력
A + B + C
의 값을 출력한다.
이 문제는 그동안 사용하던 int
라는 Primitive Type 이 아니라,
더 거대한 Primitive Type 을 사용해야 한다.
이는 바로 long
이다.
주어진 변수 중 C
가 10^12
즉, 10의 12승까지 할당받는다.
10의 12승을 직접 쓴다면, 1_000_000_000_000
이다.
즉, 이는 1조 이다.
int
타입의 변수는
-2^31
, -2,147,483,648
부터, 2^31 - 1
, 2,147,483,647
까지이다.
1조 크기의 단위는 int
로 담을 수 없다. 21억까지의 변수가 1조를 어떻게 담겠는가?
즉, 이는 int
타입보다 훨씬 더 큰 수를 저장할 수 있는 long
타입을 사용해야 하는 문제이다.
long
타입의 변수는
-9,223,372,036,854,775,808 (-2^63)
부터, 9,223,372,036,854,775,807 (2^63 - 1)
를 지원한다.
9223 * 1000 조, 922해 라는 우주적인 스케일을 가진 수로 계산해야 한다.
이번에도 마찬가지로, Scanner
, BufferedReader
입력 방식으로 친절하게 나누어서 코드를 작성 해 두겠다.
필자는 BufferedReader
클래스 사용에 익숙하므로,
앞으로는 BufferedReader
로 입력 방식을 받는다는 것을 참고해 주면 좋겠다.
Answer 1 - Scanner 방식
import java.util.*;
import java.io.*;
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();
long result = A + B + C;
System.out.println(result);
}
}
Answer 2 - BufferedReader 방식
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
long result = 0;
while(st.hasMoreTokens()) {
result += Long.parseLong(st.nextToken());
}
System.out.println(result);
}
}
포인트
누군가 익숙한 방식으로 분명히 Integer.parseInt()
혹은 sc.nextInt()
와 같이
int
방식으로 입력값을 가져올 수 있는데, 그 순간부터 문제는 틀렸다.
그러므로, 애초부터 long
타입을 선언하여 Long.parseLong()
혹은 sc.nextLong()
으로
결과값을 정확히 받길 바란다.
나도 옛날엔 틀렸다...
'백준-단계별로 풀어보기 > 1-입출력과 사칙연산' 카테고리의 다른 글
백준 2588 - 곱셈 (1) | 2024.07.24 |
---|---|
백준 1000 - A + B (1) | 2024.07.24 |
백준 2557 - Hello World (1) | 2024.07.24 |