[ 다먹살 ]/- Coding

[백준] 2870 수학숙제

엉망으로살기 2023. 2. 20. 14:13
반응형

https://www.acmicpc.net/problem/2870

 

2870번: 수학숙제

종이에서 찾은 숫자의 개수를 M이라고 하면, 출력은 M줄로 이루어져야 한다. 각 줄에는 종이에서 찾은 숫자를 하나씩 출력해야 한다. 이때, 비내림차순으로 출력해야 한다. 비내림차순은 내림차

www.acmicpc.net

 

이 문제는 풀이법 자체는 어렵지 않았다. 정규표현식을 사용해서 입력값을 전처리하면 숫자만 고를 수 있기 때문이다. 그리고 배열이나 리스트 등의 선형구조 자료형에 숫자를 저장한 후 출력 전에 정렬만 하면 되는 문제였다.

그런데 제출할 때마다 계속해서 NumberFormatException이 떠서 인터넷을 찾아보니 자료형에 대한 처리를 Integer로 하면 안되는 사항이 있었다. 당연한 것인게, 입력 조건에서 보면 각 줄은 최대 100글자라고 나와있기 때문에 이미 Integer 형태로만 숫자를 처리할 수 없는 범위였다. BigDecimal 라이브러리를 사용해서 일부 수정을 해주니 바로 해결할 수 있었다.


문제 및 입출력


코드

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections;
import java.math.BigDecimal;

public class Main
{
    public static void main(String[] args) throws NumberFormatException
    {
        Scanner sc = new Scanner(System.in);
        ArrayList<BigDecimal> list = new ArrayList<BigDecimal>();
        String reg = "[^0-9]";
        int n = sc.nextInt();
        String buf = sc.nextLine();
        
        for(int i=0; i<n; i++)
        {
            String temp = sc.nextLine();
            String[] num = temp.replaceAll(reg, ",").split(",");
            
            for(String s : num)
            {
                if(!s.equals(""))
                {
                    list.add(new BigDecimal(s));
                }
            }
        }
        
        Collections.sort(list);
        
        for(BigDecimal b : list)
        {
            System.out.println(b);
        }
        
        sc.close();
        return;
    }
}

반응형