public static String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String,Integer> hm = new HashMap<>();
for(int i = 0; i< participant.length; i++) {
if(hm.get(participant[i]) == null){
hm.put(participant[i], 1);
//hashmap에 해당 키값이 존재하지 않는 경우, add;
//hm.put(participant[i], hm.getOrDefault(player, 0)+1);
}else {
hm.put(participant[i], hm.get(participant[i])+1);
//hashmap에 해당 키값이 존재하는 경우, 기존 키의 value값에 1을 더해서 add
}
}
for(String c : completion) {
//완주한 선수가 hm의 키값으로 존재 할 경우, value값에서 -1 해준다;
if(hm.containsKey(c)){ //hm.get(c) != 0 경우로 해도 됨.
hm.put(c, hm.get(c)-1);
}
}
//결국, value가 0인 사람은(참가자-완주자) 완주를 하였고, value가 1이면 완주하지 못한 선수 이다.
for(String k : hm.keySet()) {
if(hm.get(k) != 0) {
answer = k;
}
}
return answer;
}
HashMap을 이용하여 푼다.
hashMap생성 후 참가자 이름(participant[i])이 hashmap에 존재하지 않는 경우 무조건 add. 단, value값은 +1 을 하여 count해준다.
hashMap에 참가자 이름이 존재 할 경우, 이미 존재하는 key값(참가자이름)에 해당하는 value 값을 불러와 +1 해준다.
완주한선수이름이 hashMap에 존재하는지 확인 한 후, 존재할 경우 해당 key값(완주한선수)의 value값을 가져와 -1 해준다.
결론적으로, 참가한 선수 (+1) 중 완주를 한 선수 (-1)는 value 값이 0이 된다.
0이 아닌 선수는 동명이인 이거나, 완주를 하지 못한 선수 이다.
HashMap : 동일한 key값이 추가 될 경우 새로 add되는 값으로 덮어쓰워진다. 중복 불가능. 순서 없음.
다른사람의 풀이!!!!!!!!!!
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> hm = new HashMap<>();
for (String player : participant) hm.put(player, hm.getOrDefault(player, 0) + 1);
for (String player : completion) hm.put(player, hm.get(player) - 1);
for (String key : hm.keySet()) {
if (hm.get(key) != 0){
answer = key;
}
}
return answer;
}