https://school.programmers.co.kr/learn/courses/30/lessons/42576
HashMap은 중복 Key 값을 허용하지 않지만, 중복 Value 값은 허용
ex) {'a': 1, 'b': 1, 'c': 2}
HashMap은 put() 메서드를 사용하여 데이터를 삽입하는데, Key-Value 쌍 데이터의 형태를 저장하기 때문에 삽입 연산 동안 단 하나의 객체가 생성된다.
HashSet은 객체 자체를 데이터로 저장하기 때문에 중복을 허용X
ex) {'a', 'b', 'c'}
HashSet은 add() 메서드를 사용하여 데이터를 삽입하는데,
객체 그 자체를 저장하고 내부적으로 HashMap을 사용하기 때문에 삽입되는 객체(Key값)와 dummy 객체(Value 값), 총 두 개의 객체가 삽입 연산 동안 생성된다.
for(String player : participant){
map.put(player,map.getOrDefault(player,0)+1);
}
: 위와 같은 그림처럼 player를 key로 사용, getOrDefault는 player가 없으면 0을 반환
player가 있으면 player value를 반환
for(String player:completion){
map.put(player,map.get(player)-1);
}
: 값을 넣을때 기존 player의 value를 가져와 -1을 해준다 ( 완주했으면 -1)
결론은 value가 0이 아닌 마지막 주자를 찾는다.
for(String key: map.keySet())
map.keySet()을 사용하면 {leo,eden,kiki}반환
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String,Integer> map = new HashMap<>();
for(String player : participant){
map.put(player,map.getOrDefault(player,0)+1);
}
for(String player:completion){
map.put(player,map.get(player)-1);
}
for(String key: map.keySet()){
if(map.get(key)!=0){
answer =key;
break;
}
}
return answer;
}
}