
코딩테스트에서 가장 많이 사용하는 변수형은 int입니다.
int와 long은 기능 면에서 큰 차이가 없습니다.
다만 코딩 테스트에서 만큼은 long이 더 좋습니다.
왜냐면 둘의 표현 가능 범위가 이렇게나 차이가 납니다.
코딩테스트에서는 문제의 답이나 풀이 과정에서 자료형의 범위를 넘어가는 경우가 종종 있습니다.
문제에서 정답 값을 XX로 나눈 나머지를 출력하세요.
이런식으로 말을 해준다.
따로 언급을 해주지 않습니다.
별도로 언급이 없습니다.
지금 int로 했을때 10억하고 20억을 더하면, 값이 음수로 이상해짐.
그런데, long으로 하면 옳바른 결과 나옴!
코딩테스트에서 보통 10^9을 초과하면 int형을 사용할 수 없다고 합니다.
예상하기에, 값이 10^9 가 넘어가면 long을 쓰세요...
int a = 1_000_000_000; // OK
int b = 2;
int result1 = a * b; // ❌ 오버플로우 발생!
System.out.println(result1); // 잘못된 값 출력
// a 하나를 long으로 캐스팅하면, 연산 전체가 long이 됨.
long result2 = (long) a * b; // ✅ OK
⚠️주의: 나중에만 long으로 바꾸면 의미가 없음
int result = a * b;
long fixed = (long) result; // ❌ 이미 오버플로우 된 뒤임
long으로 뒤늦게 바꾼다고 해도, 이미 망가진 값이 저장되어, 망가진 값이 그대로 옮겨지기 때문!
long 변수 선언 방법
long num = 12345678900L;
끝에 L 또는 l 붙이는 걸 꼭 기억합니다.
(L이 더 권장됨. l은 숫자 1이랑 헷갈림)
왜 L을 붙여야 해?
자바에서 숫자 리터럴은 기본적으로 int 타입으로 인식됩니다.
long num = 12345678900; // ❌ 에러! 12345678900은 int 범위 초과
long num = 12345678900L; // ✅ OK