문제 설명
https://www.acmicpc.net/problem/2870
풀이과정
처음에 int, long 타입으로 풀이했으면 런타임 에러(NumberFormat)을 만났을 것이다. 문제에서 최대 100글자까지의 입력이 들어오기 때문에 기초 자료형으로는 이 범위를 커버할 수 없다. 따라서 범위가 무한정인 java.math 패키지에 있는 BigInteger를 사용해서 풀이해야 한다. 그리고 자바에서 문자열을 정수로 파싱할 때 자동으로 숫자의 앞에 오는 0은 무시된다.
정답코드
import java.io.*;
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int M = Integer.parseInt(br.readLine());
List<BigInteger> list = new ArrayList<>();
for (int i = 0; i < M; i++) {
String input = br.readLine();
StringBuilder sb = new StringBuilder();
boolean isSeq = false;
for (int j = 0; j < input.length(); j++) {
char c = input.charAt(j);
if (Character.isDigit(c)) {
sb.append(c);
isSeq = true;
} else if (Character.isLetter(c)) {
isSeq = false;
}
if (!isSeq && !sb.toString().equals("")) {
list.add(new BigInteger(sb.toString()));
sb = new StringBuilder();
}
// 마지막 문자인 경우 체크
if (j == input.length() - 1 && !sb.toString().equals("")) {
list.add(new BigInteger(sb.toString()));
}
}
}
Collections.sort(list);
for (BigInteger i : list) {
bw.write(i + "\n");
}
bw.flush();
}
}