알고리즘

백준_수학숙제2870(JAVA)

쿠키담임선생님 2024. 5. 19. 17:44

 

기존 코드는 integer를 사용했기때문에 자꾸 런타임 에러가 떳다.

 

반례를 생각해보니 숫자가 100자리 이상 들어올 경우를 생각해야한다.

 

그래서 BigInteger를 통해 선언해야한다.

 

처음 코드는 다음과 같았다.

 

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int M = Integer.parseInt(br.readLine());
        List<Integer> answer = new ArrayList<>();

        for (int i = 0; i < M; i++) {
            String temp = br.readLine();
            StringBuilder sb = new StringBuilder();

            for (int j = 0; j < temp.length(); j++) {
                char a = temp.charAt(j);

                if (Character.isDigit(a)) {
                    sb.append(a);
                } else {
                    if (sb.length() > 0) {
                        int number = Integer.parseInt(sb.toString());
                        answer.add(number);
                        sb = new StringBuilder();
                    }
                }
            }
            // 끝에 숫자가 있을 경우 마지막 숫자 추가
            if (sb.length() > 0) {
                int number = Integer.parseInt(sb.toString());
                answer.add(number);
            }
        }

        Collections.sort(answer);

        for (int num : answer) {
            System.out.println(num);
        }
    }
}

 

 

이후 BigInteger를 사용한 코드는 아래와 같다.

 

import java.io.*;
import java.math.BigInteger;
import java.util.*;

/* 예시
01bond
02james007
03bond
04austinpowers000
*/
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int M = Integer.parseInt(br.readLine());
        List<BigInteger> answer = new ArrayList<BigInteger>();
        for (int i = 0; i < M; i++) {// 여기서 하나씩 뽑아서 숫자 배열에 넣어야한다.
            String temp = br.readLine();
            //Character.isDigit 이라는 함수사용 : 이게 숫자인지 아닌지 판별하는 함수임
            StringBuilder sb = new StringBuilder();

            for(int j =0; j<temp.length(); j++){
                char a = temp.charAt(j);

                if(Character.isDigit(a)){
                    sb.append(a);
                }else {
                    if(sb.length()>0){
                        answer.add(new BigInteger(sb.toString()));
                        sb = new StringBuilder();
                    }
                }
            }

            if(sb.length()>0){
                answer.add(new BigInteger(sb.toString()));
            }
        }
        Collections.sort(answer);
        for(BigInteger num : answer){
            System.out.println(num);
        }
    }
}

 

 

 

 

'알고리즘' 카테고리의 다른 글

프로그래머스 - 모음사전(java)  (0) 2024.10.09
프로그래머스 _ 소수찾기 (JAVA)  (0) 2024.09.03
백준_벽부수고 이동하기(JAVA)  (0) 2024.05.15
백준_소수의 연속합(JAVA)  (2) 2024.02.28
백준_암호만들기(JAVA)  (0) 2024.02.21