CS/자료구조&알고리즘

[백준] 2870번: 수학문제

봄의 개발자 2024. 1. 24. 10:25
728x90
반응형

 

 

 

풀이 방법

  1. 정규식을 통해 숫자를 걸러낸다.
  2. 숫자가 아닌 문자는 " "으로 바꾼다.
  3. 빈칸을 제거한다.
    이 과정에서 split(" "), isBlank()를 사용했는데 ... 
    먼저 공백을 기준으로 문자열을 나누기 위해 split()을 사용했다. 내가 예상한 결과는 숫자만 배열에 저장되는 것인데 예상치 못하게 빈 문자("")도 같이 저장되었다. 그래서 isBlank를 사용해서 추가 검증을 해주었다.
  4. 숫자만 골라내 리스트에 저장하고 이를 정렬한다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

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

        List<BigInteger> arr = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            String replaced =  br.readLine().replaceAll("[^0-9]", " ");
            String[] split = replaced.split(" ");
            for (int j = 0; j < split.length; j++) {
                if (!split[j].isBlank())
                    arr.add(new BigInteger(split[j]));
            }
        }

        Collections.sort(arr);
        for (BigInteger i : arr) {
            System.out.println(i);
        }
    }
}

 

 

주의 사항

  • int (32 비트)
    • 최소값: -2,147,483,648
    • 최대값: 2,147,483,647
    • 총 자릿수: 약 10자리
  • long (64 비트)
    • 최소값: -9,223,372,036,854,775,808
    • 최대값: 9,223,372,036,854,775,807
    • 총 자릿수: 약 19자리
  • BigInteger 클래스는 가변 정밀도를 가지므로 이론적으로는 제한이 없다.
  • 100자리 숫자가 입력으로 들어오기 때문에 int(약 10자리), long(약 19자리)으로 표현할 수 없기 때문에 BigInteger 타입을 사용해야한다.
728x90
반응형