[プログラマー]完走できなかった選手


1.問題解きに悩む


  • Arrays.sortメソッドを使用してソートし、値を順番に比較して、不適切な値を見つけます.
  • しかしこの問題はhash問題です...
  • 参加者と完了者はそれぞれhashMapを宣言し、各キーと値を比較します...?向き
  • は問題を解決することができないので、sort法を用いて問題を優先的に解決することにした
  • .

    2.方法1-hashMapを無効にする

    import java.util.Arrays;
    
    class Solution {
        public String solution(String[] participant, String[] completion) {
            Arrays.sort(participant);
            Arrays.sort(completion);
            int i;
            for(i = 0; i < completion.length; i++){
                if(!participant[i].equals(completion[i])){
                    return participant[i];
                }
            }
            return participant[i];
        }
    }
  • Arrays.sort()メソッド
  • を使用
  • for文で使用されるint iは、for文の外で宣言され、for文の外でも有効になります.
  • equalsメソッドを使用して、参加者の値と完了した値が同じかどうかを比較します.
  • 名のフルコースを走っていない選手が参加者配列の最後のインデックスに存在する場合、操作が実行されていないかどうかを尋ねる
    =>自動実行参加者の最後の要素は
  • を返します.

    3.方法2-hashMapの使用

    import java.util.HashMap;
    
    class Solution {
        public String solution(String[] participant, String[] completion) {
            String result = "";
            HashMap<String, Integer> hashMap = new HashMap<>();
            for(String p : participant){
                hashMap.put(p, hashMap.getOrDefault(p, 0) + 1);
            }
            for(String c : completion){
                hashMap.put(c, hashMap.get(c) - 1);
            }
            for(String key : hashMap.keySet()){
                if(hashMap.get(key) != 0){
                    result = key;
                    break;
                }
            }
            return result;
        }
    }
  • HashMapは2つを単独で宣言するのではなく、1つの使用方法
  • を宣言する.
  • 参加者を繰り返す場合は、HashMapに参加する選手名(String p)とIntegerを挿入する
  • getOrDefaultを使用して重複名チェック
  • を行います.
  • HashMapのputは、キーが存在する場合、値が
  • に変更されるため、新しい値です.
  • 同じ名前の人がhashMapに登録している場合.getOrDefaultのため、値は2
  • です.
  • pが存在する場合はpの値を返し、存在しない場合はデフォルト値0を返し、+1
  • 繰り返し完了
  • の間、hashMapの値-1が取得され、
  • が含む.
  • hashMapから1つのキーが取得する、そのキーの値が0でなければ未完成の選手であるため、そのキーの値は
  • に戻る.

    4.学んだこと


    getOrDefault(Object Key,V defaultValue):見つかったキーが存在する場合は見つかったキーの値を返し、存在しない場合はデフォルト値を返します
    String[] arr1 = {"qwe", "asd", "zxc", "qwe"};
    String[] arr2 = {"qwe", "asd", "zxc"};
    
    Map<String, Integer> map = new HashMap<>();
    for(String a : arr1) map.put(a, map.getOrDefault(a, 0) + 1);
    System.out.println(map);
    // {qwe=2, asd=1, zxc=1}
    質問元:https://programmers.co.kr/learn/courses/30/lessons/42576