알고리즘/백준

공부 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로 제출했다가 실패해서인듯

반응형