fork download
  1. import java.util.*;
  2. import java.util.stream.Collectors;
  3.  
  4. // implementasi kelas "Klasemen"
  5. // jika ingin debug, bisa un-komen print yang di-komen
  6. class Klasemen {
  7. private Map<String, Integer> dataKlasemen;
  8.  
  9. public Klasemen(List<String> daftarKlub) {
  10. this.dataKlasemen = new HashMap<>();
  11. for (String klub : daftarKlub) {
  12. this.dataKlasemen.put(klub, 0);
  13. // System.out.println(dataKlasemen);
  14. }
  15. }
  16.  
  17. public void catatPermainan(String klubHome, String klubAway, String skor) {
  18. // Parsing dulu skornya dengan ":" sebagai parser
  19. String[] skorSplit = skor.split(":");
  20. int skorHome = Integer.parseInt(skorSplit[0]);
  21. int skorAway = Integer.parseInt(skorSplit[1]);
  22.  
  23. if (skorHome > skorAway) {
  24. int poinSaatIni = dataKlasemen.get(klubHome);
  25. dataKlasemen.put(klubHome, poinSaatIni + 3);
  26. // System.out.println(dataKlasemen);
  27. } else if (skorAway > skorHome) {
  28. int poinSaatIni = dataKlasemen.get(klubAway);
  29. dataKlasemen.put(klubAway, poinSaatIni + 3);
  30. // System.out.println(dataKlasemen);
  31. } else {
  32. dataKlasemen.put(klubHome, dataKlasemen.get(klubHome) + 1);
  33. dataKlasemen.put(klubAway, dataKlasemen.get(klubAway) + 1);
  34. // System.out.println(dataKlasemen);
  35. }
  36. }
  37.  
  38. public Map<String, Integer> cetakKlasemen() {
  39. return dataKlasemen.entrySet()
  40. .stream()
  41. .sorted(Map.Entry.<String, Integer>comparingByValue().reversed())
  42. .collect(Collectors.toMap(
  43. Map.Entry::getKey,
  44. Map.Entry::getValue,
  45. (e1, e2) -> e1,
  46. LinkedHashMap::new
  47. ));
  48. }
  49.  
  50. public String ambilPeringkat(int rank) {
  51. if (rank <= 0 || rank > dataKlasemen.size()) {
  52. return "Peringkat tidak valid. Mungkin bisa dicoba peringkat 1 sampai " + dataKlasemen.size();
  53. }
  54. List<String> daftarPeringkat = new ArrayList<>(cetakKlasemen().keySet());
  55. return daftarPeringkat.get(rank - 1);
  56. }
  57. }
  58.  
  59. // Testcase sesuai dengan soal test
  60. public class Main {
  61. public static void main(String[] args) {
  62. List<String> daftarKlub = Arrays.asList("Liverpool", "Chelsea", "Arsenal");
  63.  
  64. Klasemen klasemen = new Klasemen(daftarKlub);
  65.  
  66. klasemen.catatPermainan("Arsenal", "Liverpool", "2:1");
  67. klasemen.catatPermainan("Arsenal", "Chelsea", "1:1");
  68. klasemen.catatPermainan("Chelsea", "Arsenal", "0:3");
  69. klasemen.catatPermainan("Chelsea", "Liverpool", "3:2");
  70. klasemen.catatPermainan("Liverpool", "Arsenal", "2:2");
  71. klasemen.catatPermainan("Liverpool", "Chelsea", "0:0");
  72.  
  73. System.out.println("HASIL TES\n");
  74.  
  75. Map<String, Integer> hasilKlasemen = klasemen.cetakKlasemen();
  76. System.out.println("Hasil cetakKlasemen():");
  77.  
  78. // sesuai dengan soal, hasilnya seharusnya {Arsenal=8, Chelsea=5, Liverpool=2}
  79. System.out.println(hasilKlasemen);
  80.  
  81. System.out.println("------------------------------------");
  82.  
  83. String peringkatDua = klasemen.ambilPeringkat(2);
  84. System.out.println("Hasil ambilPeringkat(2):");
  85.  
  86. // sesuai dengan soal, hasilnya seharusnya "Chelsea"
  87. System.out.println(peringkatDua);
  88. }
  89. }
Success #stdin #stdout 0.11s 56108KB
stdin
Standard input is empty
stdout
### HASIL TES ###

Hasil cetakKlasemen():
{Arsenal=8, Chelsea=5, Liverpool=2}
------------------------------------
Hasil ambilPeringkat(2):
Chelsea