import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] strs = br.readLine().split(" ");
long A = Long.parseLong(strs[0]);
long B = Long.parseLong(strs[1]);
long C = Long.parseLong(strs[2]);
long sum = A + B + C;
System.out.println(sum);
}
}
# 입/출력 결과
# 과정
BufferedReader + InputStreamReader를 사용해서 문제를 풀었다.
컴파일 에러는 오타 종류였는데, 런타임 에러는 영문을 몰랐다.
발생 이유:
문제의 입력 값을 보면 "첫 번째 줄에 A, B, C (1 ≤ A, B, C ≤ 10¹²)이 공백을 사이에 두고 주어진다."라는 글이 적혀있다.
처음 작성했던 코드는 int형으로 입력 값을 받았던 것이 원인이었다.
10¹²는 int 범위를 초과하는 값이었다. 즉, 자료형의 범위 초과. 오버플로우(overflow) 때문이었다.
해결 방법:
int 타입을 long으로 변경해주고, Integer.parseInt()가 아닌 Long.parseLong()을 사용했다.
# 느낀 점
문제를 읽었어도 나는 문제를 풀 수 없었을 것이다. 왜냐하면 int타입과 long타입의 명확한 차이를 몰랐기 때문이다.
솔직히 수로 따지니 어렵다.
int타입은 표현 범위가 -2³¹ ~ 2³¹ - 1 이며, 약 21억까지 표현이 가능하고
long타입은 표현 범위가 -2⁶³ ~ 2⁶³ - 1 이며, 약 9경까지 표현 가능하다고 한다.
10의 거듭제곱 기준으로는 int타입은 약 2.1 × 10⁹, long타입은 약 9.2 × 10¹⁸ 이라고 한다.