문제
내가 작성한 오답
: 효율성 테스트 실패
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
for(String s:completion){
for(int i=0; i<participant.length; i++){
if(participant[i].equals(s)) {
participant[i] = "";
break;
}
}
}
for(String s:participant){
if(!s.isEmpty()) return s;
}
return answer;
}
}
내가 작성한 정답
// Array 이용
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
Arrays.sort(participant);
Arrays.sort(completion);
for(int i=0; i<completion.length; i++){
if(!participant[i].equals(completion[i])) return participant[i];
}
return participant[participant.length-1];
}
}
// HashMap이용
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
Map<String,Integer> map = new HashMap<>();
for(String s:participant){
map.put(s,map.getOrDefault(s,0)+1);
}
for(String s:completion){
map.put(s,map.get(s)-1);
}
for(Map.Entry<String,Integer> e: map.entrySet()){
if(e.getValue()==1) return e.getKey();
}
return "";
}
}다른 사람들의 정답
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();
}
}Share article