오늘은 여기까지
[백준/2870] 수학숙제 - 자바 Java 본문
https://www.acmicpc.net/problem/2870
출처: COCI 2010/2011 Contest #2
문제
숫자와 알파벳 소문자로 되어있는 글자가 N줄있다. 상근이는 여기서 숫자를 모두 찾은 뒤, 이 숫자를 비내림차순으로 정리해야한다. 숫자의 앞에 0이 있는 경우에는 정리하면서 생략할 수 있다.
글자를 살펴보다가 숫자가 나오는 경우에는, 가능한 가장 큰 숫자를 찾아야 한다. 즉, 모든 숫자의 앞과 뒤에 문자가 있거나, 줄의 시작 또는 끝이어야 한다.
예를 들어, 01a2b3456cde478에서 숫자를 찾으면 1, 2, 3456, 478이다.
첫째 줄에 종이의 줄의 개수 N이 주어진다. (1 ≤ N ≤ 100)
다음 N개의 줄에는 각 줄의 내용이 주어진다. 각 줄은 최대 100글자이고, 항상 알파벳 소문자와 숫자로만 이루어져 있다.
종이에서 찾은 숫자의 개수를 M이라고 하면, 출력은 M줄로 이루어져야 한다. 각 줄에는 종이에서 찾은 숫자를 하나씩 출력해야 한다. 이때, 비내림차순으로 출력해야 한다. 비내림차순은 내림차순의 반대인 경우인데, 다음 수가 앞의 수보다 크거나 같은 경우를 말한다.
풀이
- 최대 100글자까지의 입력이 들어오기 때문에 int, long이 아닌 BigInteger 객체를 사용해야 한다.
- 자바에서 문자열을 정수로 파싱할 때 자동으로 숫자의 앞에 오는 0은 무시된다.
import java.io.*;
import java.math.BigInteger;
import java.util.*;
public class Main {
static int n;
static ArrayList<BigInteger> answer;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
n = Integer.parseInt(br.readLine());
answer = new ArrayList<>();
for (int i = 0; i < n; i++) {
String input = br.readLine();
boolean cont = false;
for (int j = 0; j < input.length(); j++) {
char c = input.charAt(j);
if (Character.isDigit(c)) {
sb.append(c);
cont = true;
} else if (Character.isLetter(c)) {
cont = false;
}
if (!cont && sb.length() > 0) { // 숫자 입력이 끝난 경우
answer.add(new BigInteger(sb.toString()));
sb.setLength(0);
}
if (j == input.length() - 1 && sb.length() > 0) { // 마지막 입력인 경우
answer.add(new BigInteger(sb.toString()));
}
}
}
Collections.sort(answer);
for (BigInteger l : answer) {
System.out.println(l);
}
}
}
'Problem Solving' 카테고리의 다른 글
[백준/2876] 그래픽스 퀴즈 - Java 자바 (1) | 2025.01.11 |
---|---|
[백준/1010] 다리 놓기 - Java 자바 (0) | 2025.01.10 |
[백준/2839] 설탕 배달 - Java 자바 (0) | 2025.01.07 |
[프로그래머스] 주문량이 많은 아이스크림들 조회하기 - MySQL (0) | 2025.01.04 |
[프로그래머스] 호텔 방 배정 - 자바 Java (1) | 2024.12.20 |