[Programmers]完走しなかった選手(JAVA)




この問題はラベルの問題で、最初は別の方法で解くのを忘れました.そして,海図を用いて解き直し,2つの方法を共用して解いた.

ソートの使用方法


まず海図を用いず,participantcompletionをそれぞれ並べ替えた.ソートを行う理由は,2つの配列を順次ナビゲーション比較するためである.二人は一人を排除しても同じだ.したがって、同じインデックスのparticipantcompletionの要素が異なる場合、これは、participantの要素がcompletionにないためである可能性がある.つまり、この要因は完走できなかった選手です.この選手をtempに貯蔵する.
しかし、完走した選手が最後にいなければ、tempは何もなかった.したがって、このときparticipantの最後の要素が加えられる.
class Solution {
        public String solution(String[] participant, String[] completion){
            Arrays.sort(participant);
            Arrays.sort(completion);
            String temp="";


            for (int i=0;i<completion.length;i++) {
                if (!participant[i].equals(completion[i])) {
                    temp=participant[i];
                    break;
                }
            }
            if (temp.equals(""))
                temp=participant[participant.length-1];

            return temp;
        }
    }

HashMapの使い方


実は初めて海西地図を使うのはちょっと迷いましたHashMapは、key-valueペアが先に保存される資料構造である.ここで、参加者の名前はkeyに保存され、valueはその名前を持つ参加者の数を格納する.たとえば、同じ名前の人が3人いる場合、kikiの値は3です.
次に,completion配列を順次探索し,completion内の選手名と同じキーの要素のVaule値を1減少させる.完走した選手を除く.これらの繰り返し文を巡回すると、1名を除くすべてのkeyの値は0になります.そのため、0ではないキーが完走できない選手になります!
    class Solution {
        public String solution(String[] participant, String[] completion) {
            Map<String,Integer> par = new HashMap<>();
            String answer="";

            for (String i: participant)
                par.put(i,par.getOrDefault(i,0)+1);

            for (int i=0;i<completion.length;i++) {
                par.put(completion[i],par.get(completion[i])-1);
            }

            Iterator<String> iter = par.keySet().iterator();
            while (iter.hasNext()) {
                String key = iter.next();

                if (par.get(key)!=0) {
                    answer=key;
                }

            }


            return answer;
        }
    }
Map.getOrDefaultValue(key,defaultValue)mapに検索する鍵
  • が存在する場合、この値
  • が返される.
  • がない場合はdefaultValue
  • に戻ります.