코딩 테스트

[코딩테스트] 백준 11382번: 꼬마 정민

dev.jelee 2025. 5. 7. 21:38

# 문제

 

# 코드

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경까지라고 외우면 되려나..?