코딩 테스트
[코딩테스트] 백준 11382번: 꼬마 정민
dev.jelee
2025. 5. 7. 21:38
# 문제
- 주소: https://www.acmicpc.net/problem/11382
- A, B, C (1 ≤ A, B, C ≤ 1012) 세 수의 합을 더하고 값 출력하기.
# 코드
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¹⁸ 이라고 한다.
- 쉽게 외우려면 int는 약 ±21억까지, long은 약 ±9경까지라고 외우면 되려나..?