알고리즘/백준
공부 92일차: 백준 10824번 네 수 자바 Java
김발자~
2022. 10. 30. 18:52
반응형
10824 네 수
https://www.acmicpc.net/problem/10824
10824번: 네 수
첫째 줄에 네 자연수 A, B, C, D가 주어진다. (1 ≤ A, B, C, D ≤ 1,000,000)
www.acmicpc.net
백준 10824번 문제 네 수
문제
과정 생각해보기
주어지는 A,B,C,D를 문자열로 받고, A+B, C+D로 문자열끼리 합쳐준 뒤 숫자형으로 변환하면 될 것 같다
오답
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
//1번째
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
System.out.println(Integer.parseInt(st.nextToken()+st.nextToken())+Integer.parseInt(st.nextToken()+st.nextToken()));
}
}
//2번째
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
String arr[] = new String[4];
for(int i = 0; i < arr.length; i++) {
arr[i] = st.nextToken();
}
double first = Double.parseDouble(arr[0]+arr[1]);
double second = Double.parseDouble(arr[2]+arr[3]);
System.out.println(first+second);
}
}
|
cs |
처음엔 그냥 단순하게 합쳐서 냈더니, A,B,C,D의 최대값인 1,000,000을 넣었더니 NumberFormatException이 떴다
그래서 double형으로 바꿨더니 아예 오답처리
더해지는 수가 모두 최대값일 경우 int타입의 최대범위를 벗어나는 게 문제였다
정답 인정 코드
1) 배열o
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.math.BigInteger;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
String arr[] = new String[4];
for(int i = 0; i < arr.length; i++) {
arr[i] = st.nextToken();
}
BigInteger first = new BigInteger(arr[0]+arr[1]);
BigInteger second = new BigInteger(arr[2]+arr[3]);
System.out.println(first.add(second));
}
}
|
cs |
2) 배열x
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
String arr[] = new String[4];
BigInteger first = new BigInteger(st.nextToken()+st.nextToken());
BigInteger second = new BigInteger(st.nextToken()+st.nextToken());
System.out.println(first.add(second));
}
}
|
cs |
그래서 기본타입 int보다 더 큰 범위를 맡는 BigInteger클래스를 사용했다
딱히 배열로 만들 필요도 없겠다 싶어서 두 개 다 제출해봤고, 모두 정답처리되었다
주의할 점이라면 BigInteger는 더할 때 + 연산자가 아닌 add()메서드를 사용해야 한다는 것 정도?
아래가 배열o 위가 배열x - 차이는 이러하다
찾아보니 굳이 BigInteger를 사용하지 않고 그냥 long 타입으로 바꿔서 제출한 사람도 많았다
int 안 된다고 long이 아니라 바로 biginteger쪽으로 기운 것도 좀 아닌가보다
어쨌든 난이도가 매우 낮은 문제이긴 했다
정답률이 낮은 이유는 다들 처음에 int로 제출했다가 실패해서인듯
반응형