[伯俊]BOJ 1755デジタルゲームJAVA


BOJ 1755デジタルゲーム

質問する


79を英語で読むが、数字単位で1つずつ読むと「7,9」になる.80も同様に「8 zero」と読みます.79は80未満ですが、英語で1つの数字を読むと、「8 zero」は「7,9」より先に着きます.
問題は、1つの整数M,N(1≦M,N≦99)が与えられると、1つの数字M以上N以下の整数を読み取ることを基準としてアルファベット順に並べ替えて出力することである.

入力


第1行はMとNを与える.

しゅつりょく


M以上N以下の整数を問題条件で並べ替え、1行10個ずつ出力します.

サンプルI/O



ソースコード

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    private static List<Info> list;
    private static String[] numToStr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        list = new ArrayList<>(m - n + 1);

        for (int i = n; i <= m; i++) {
            String str = String.valueOf(i);
            StringBuilder sb = new StringBuilder();

            for (int j = 0; j < str.length(); j++) {
                sb.append(numToStr[str.charAt(j) - '0']);

                if (str.length() > 1) { //두 자릿수의 수일 경우
                    sb.append(" ");
                }
            }
            list.add(new Info(sb.toString(), i));
        }

        Collections.sort(list);

        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i).num + " ");
            if ((i + 1) % 10 == 0) {
                System.out.println();
            }
        }
    }

    private static class Info implements Comparable<Info> {
        String word;
        int num;

        public Info(String word, int num) {
            this.word = word;
            this.num = num;
        }

        @Override
        public int compareTo(Info o) {
            return this.word.compareTo(o.word);
        }
    }
}

Comment

  • クラスが形成され、javaのインタフェースの1つであるComparableによって정렬が実現される.
  • は、Collections.sort点、誇張された方法(compareTo)に従って並べ替えられる.