[Programmers]完走しなかった選手(JAVA)
10651 ワード
この問題はラベルの問題で、最初は別の方法で解くのを忘れました.そして,海図を用いて解き直し,2つの方法を共用して解いた.
ソートの使用方法
まず海図を用いず,
participant
とcompletion
をそれぞれ並べ替えた.ソートを行う理由は,2つの配列を順次ナビゲーション比較するためである.二人は一人を排除しても同じだ.したがって、同じインデックスのparticipant
とcompletion
の要素が異なる場合、これは、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に検索する鍵Reference
この問題について([Programmers]完走しなかった選手(JAVA)), 我々は、より多くの情報をここで見つけました https://velog.io/@kekim20/Programmers-완주하지-못한-선수JAVAテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol