<문제 제시>
꼬마 정민이는 이제 A + B 정도는 쉽게 계산할 수 있다. 이제 A + B + C를 계산할 차례이다!
<문제 해결 과정>
첫 입력값으로 split()함수를 통해 숫자를 구분하여 더해볼까 생각도해보고
StringTokenizer()를 통해 문자열형태로 입력받은 후 Integer.parseInt()로 정수 더하기를 해볼까 생각도 해보았다.
일단은 일반적인 방법으로 풀어보고자 하였다.
<Try 1>
// 런타임 에러 (NumberFormat) 발생, 문자열을 숫자로 바꿔 연산하고자할때 발생.
String INPUT = br.readLine();
String[] INPUT_1 = INPUT.split(" ");
int result = 0;
for(int i = 0; i < INPUT_1.length; i++) {
int temp = Integer.parseInt(INPUT_1[i]);
result += temp;
}
System.out.println(result);
INPUT_1 배열에 split(" ") 함수로 공백 기준으로 분리하여 값을 넣어주고,
for문을 통해 이 배열의 길이만큼 반복하며 result라는 변수에 누적합을 더해주고자 하였다.
하지만 NumberFormat에러가 발생하였다.
<Try 2>
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String INPUT = br.readLine();
String[] INPUT_1 = INPUT.split(" ");
System.out.println(Arrays.toString(INPUT_1));
int[] INPUT_2 = new int[INPUT_1.length];
for(int i = 0; i < INPUT_1.length; i++) {
INPUT_2[i] = Integer.parseInt(INPUT_1[i]);
}
int result = 0;
for(int i = 0; i < INPUT_2.length; i++) {
result += INPUT_2[i];
}
System.out.println(result);
INPUT_1 배열 자체의 값을 다루면서 발생한 문제인 것 같아
INPUT_2 배열을 INPUT_1 길이만큼 만들어 INPUT_1 값의 정수형 배열로 초기화해주었다.
for문을 통해 INPUT_2배열을 돌면서 result에 누적하고자 하였다.
하지만 여전히 런타임 에러 발생
<Try 3>
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
System.out.println(a + b + c);
런타임 에러 (InputMismatch) 가 발생했다. 정수형으로 받아서 그럴 수 있으니 float, long형으로 다시 시도해보았다.
시도하면서 알게된 것은 입력값이 매우 큰 값이 들어올 수도 있다는 것이다.
<Answer 1>
Scanner sc = new Scanner(System.in);
long a = sc.nextLong();
long b = sc.nextLong();
long c = sc.nextLong();
System.out.println(a + b + c);
int자료형을 long으로 바꾸어 풀어보니 해결되었다.
<전체 코드>
public class q_11382_littleJung {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
long a = sc.nextLong();
long b = sc.nextLong();
long c = sc.nextLong();
System.out.println(a + b + c);
}
}
입력값이 최대 10^12의 크기로 들어오는데, int형을 쓰면 오버플로우가 날 수 있어 long형을 써야했다.
문제에서 1 ≤ A, B, C ≤ 1012 이라고 주어졌기에 int(-2,147,483,648~2,147,483,647)가 아닌
long(-9,223,372,036,854,775,808~9,223,372,036,854,775,807) 타입을 사용해야 런타임 에러가 나지 않았다.
입력값 제한을 유의해야겠다고 생각했다.
<문제 링크>
'Algorithms > 백준' 카테고리의 다른 글
[백준] '공 바꾸기' - Java (0) | 2024.06.01 |
---|---|
[백준] '럭비 클럽' - Java (0) | 2024.06.01 |
[백준] '모음의 개수' - Java (0) | 2024.06.01 |
[백준] '피보나치 수 5' - Java (0) | 2023.07.20 |
[백준] '팩토리얼' - Java (0) | 2023.07.19 |