[プログラマー][java]完走できなかった選手
質問リンク-https://programmers.co.kr/learn/courses/30/lessons/42576ソリューション まず、問題の条件下で、完了した長さは参加者の長さより1小さいことに気づいた.
1ほど小さいので、完了時に参加者の名前が一つもない場合は、すぐに戻ればいいし、すべてある場合は、参加者は重複する人の名前を返せばいい.
これを実現するには、参加者の名前と名前を知る必要があります.
2 D配列として保存し、比較は完了したが、効率は通過しなかった-
この問題を解決するために,データ構造を検索する際にhash関数を用いてkey−valueを迅速に検索できるhashmapを発見し,使用した.
hashMapのkeyは名前を表し、valueは同じ名前が何回繰り返されるかを表す.
重複する名前がある場合は、2として保存します.-
最後に、完成中でない人を見つけるために、繰り返し文を使います
完了時に存在するユーザはもちろん参加者に存在する.
各参加者の値(何人いるか)から1を減算します.
したがって,0(完了1名,参加者1名)である.
1(完了1名、参加者2名、または完了0名、参加者1名)を使用して値1を検索し、キー値を返します.
1ほど小さいので、完了時に参加者の名前が一つもない場合は、すぐに戻ればいいし、すべてある場合は、参加者は重複する人の名前を返せばいい.
これを実現するには、参加者の名前と名前を知る必要があります.
2 D配列として保存し、比較は完了したが、効率は通過しなかった-
この問題を解決するために,データ構造を検索する際にhash関数を用いてkey−valueを迅速に検索できるhashmapを発見し,使用した.
hashMapのkeyは名前を表し、valueは同じ名前が何回繰り返されるかを表す.
重複する名前がある場合は、2として保存します.-
最後に、完成中でない人を見つけるために、繰り返し文を使います
完了時に存在するユーザはもちろん参加者に存在する.
各参加者の値(何人いるか)から1を減算します.
したがって,0(完了1名,参加者1名)である.
1(完了1名、参加者2名、または完了0名、参加者1名)を使用して値1を検索し、キー値を返します.
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
Map<String,Integer> part = new HashMap<>();
for(String name: participant){ //저장
if(part.get(name)==null) part.put(name,1);
else part.put(name,part.get(name)+1);
//part.put(name,part.getOrDefault(name,0)+1); null처리를 쉽게
}
for(String name: completion){ //completion과 비교, -1
part.put(name,part.get(name)-1);
}
for(String key:part.keySet()){ // 0이 아닌 것(1)을 찾는다!
if(part.get(key)!=0) return key;
}
return "";
}
}
Reference
この問題について([プログラマー][java]完走できなかった選手), 我々は、より多くの情報をここで見つけました https://velog.io/@guswls159357/프로그래머스-완주하지-못한-선수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol