총점: 50 (정확성 50, 효율성 0)
리스트에 participant 넣고 completion과 비교하여 같을 때마다 리스트에서 remove
총점 : 70 (정확성 50, 효율성 20)
participant가 담겨있는 list와 completion정렬하여 비교
총점 : 💯 (정확성 50, 효율성 50)
아 그냥 정렬해서 같지 않을 때 리턴하면 된다.
7점 획득!
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
Arrays.sort(completion);
Arrays.sort(participant);
for (int i=0;i< completion.length;i++){
if(!participant[i].equals(completion[i])){
return participant[i];
}
}
answer = participant[participant.length-1];
return answer;
}
}
원래는 해시문제인데 해시를 몰라서 이렇게 풀었음..
나랑 코드가 비슷한사람 중에 멋있는 코드 발견.
for의 int i를 바깥에 선언해서
participant[participant.length-1];을 participant[i];로 사용했음.
import java.util.HashMap;
class Solution {
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;
}
}
import java.util.Arrays;
import java.util.Iterator;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
class Solution {
public String solution(String[] participant, String[] completion) {
Map<String, Long> participantMap = Arrays.asList(participant).stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
for(String name : completion) {
Long value = participantMap.get(name) - 1L;
if(value == 0L) {
participantMap.remove(name);
} else {
participantMap.put(name, value);
}
}
return participantMap.keySet().iterator().next();
}
}