이 문제를 보면 숫자 -> 영어로 바꿔서 정렬을 하고 그 순서대로 숫자 리스트를 정렬하는게 목표이다.
import java.io.*;
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));
StringTokenizer stk = new StringTokenizer(br.readLine());
int M = Integer.parseInt(stk.nextToken());
int N = Integer.parseInt(stk.nextToken());
String[] numberlist = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
List<String> list = new ArrayList<>();
for (int i = M; i <= N; i++) {
String word = convert(i, numberlist);
list.add(word + i);
}
Collections.sort(list);
int count = 0;
for (String s : list) {
if (count % 10 == 0 && count != 0){
bw.write("\n");
}
bw.write(s.replaceAll("[a-z]","").trim() + " ");
count++;
}
bw.flush();
bw.close();
br.close();
}
static String convert(int i, String[] numberlist) {
StringBuilder sb = new StringBuilder();
for(char d : String.valueOf(i).toCharArray()){
sb.append(numberlist[d - '0']).append(" "); //0빼줘서 ASCII 코드 전환
}
return sb.toString();
}
}
처음에는 map을 사용해서 영단어와 숫자를 같이 저장할까도 했지만 정렬을 해야하기 때문에 treemap을 써야하는데 불필요한 과정일 것 같아서 다른 방법이 없을까 곰곰히 생각해보았다.
영어와 숫자는 서로 완전히 구분이 가능하기 때문에 둘이 합쳐서 String List로 저장한다음 정규식으로 영어를 제거하여 쉽게 숫자만 남길 수 있었다.
정렬은 Collections.sort를 사용하였다.
아 제출을 했을 때 출력형식이 계속 잘못되었다고 나왔는데
if (count % 10 == 0){
bw.write("\n");
}
이렇게 써줘서 0번째에도 공백라인을 출력했었다. count가 0이 아닐때라고 조건을 추가해주니 바로 정답처리 되었다.
저것때문에 얼마나 오래 고민했는지..