import java.util.HashMap;
/* hash 해결법*/
// 해시는 key - value의 조합 => HashMap
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
// 1. 해시맵을 만든다.(participant 기준)
HashMap<String,Integer> map = new HashMap<>();
for(String player : participant){
// 없었으면 0, 있었으면 +1
map.put(player, map.getOrDefault(player, 0) + 1);
}
// 2. 해시맵을 뺀다.(completion 기준)
for(String player : completion){
// 기존 값을 가져와서 1을 뺀 값을 넣어달라.
map.put(player, map.get(player) - 1);
}
// 3. value가 0이 아닌 사람을 찾는다.
// keySet -> map에 있는 key들을 하나씩 꺼내 써보기.
for(String key : map.keySet()){
if(map.get(key) != 0){
answer = key;
break;
}
}
return answer;
}
}
/*
선수 A, B, C
완주한 선수 B,C
완주 못한 선수 A
1. Sorting
두 list를 sorting 한다.
2. 비교
completion list의 length 만큼 돌면서 participant에만 존재하는 한 명을 찾는다.
3. 마지막 주자
List를 전부 다 뒤져도 답이 없다면, participant의 마지막 주자가 완주하지 못한 선수이다.
import java.util.Arrays;
// sorting / loop 해결법
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
// 1. 두 배열을 정렬한다.
Arrays.sort(participant);
Arrays.sort(completion);
// 2. 두 배열을 다를 때까지 찾는다.
int i=0;
for(; i < completion.length; i++)
if(!participant[i].equals(completion[i]))
break;
// 3. 여기까지 됐다면, 마지막 주자가 완주하지 못한 선수다.
return participant[i];
}
}
*/
import java.util.HashMap;
import java.util.Map;
import java.util.Iterator;
/* hash 해결법 - hash & entrySet*/
// 해시는 key - value의 조합 => HashMap
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
// 1. 해시맵을 만든다.(participant 기준)
HashMap<String,Integer> map = new HashMap<>();
for(String player : participant){
// 없었으면 0, 있었으면 +1
map.put(player, map.getOrDefault(player, 0) + 1);
}
// 2. 해시맵을 뺀다.(completion 기준)
for(String player : completion){
// 기존 값을 가져와서 1을 뺀 값을 넣어달라.
map.put(player, map.get(player) - 1);
}
// 3. value가 0이 아닌 사람을 찾는다.
// entrySet 이 keySet보다 빠름.
Iterator<Map.Entry<String, Integer>> iter = map.entrySet().iterator();
while(iter.hasNext()){
Map.Entry<String, Integer> entry = iter.next();
if(entry.getValue() != 0){
answer = entry.getKey();
break;
}
}
return answer;
}
}