[백준] 2870 수학숙제
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;
}
}