
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 서수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
| participant | completion | return |
|---|---|---|
| ["leo", "kiki", "eden"] | ["eden", "kiki"] | "leo" |
| ["marina", "josipa", "nikola", "vinko", "filipa"] | ["josipa", "filipa", "marina", "nikola"] | "vinko" |
| ["mislav", "stanko", "mislav", "ana"] | ["stanko", "ana", "mislav"] | "mislav" |
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer ="";
HashMap<String, Integer> noFinish = new HashMap<>();
for(String player : participant)
noFinish.put(player, noFinish.getOrDefault(player, 0) + 1);
for(String player : completion)
noFinish.put(player, noFinish.get(player) -1);
for(String key : noFinish.keySet()) { //keySet은 key값만 가져온다.
if(noFinish.get(key) != 0) {
answer = key;
break;
}
}
return answer;
}
}
매개 변수 : 이 메서드는 두 개의 매개 변수를 허용한다.사용법
getOrDefault(Object key, V DefaultValue)
map.put(player라는 키, player의 값이 존재하면 player의 값을 넣어주고 없다면 0), 그리고 + 1
즉, getOrDefault는 중복값을 가려내기 위해 쓴 함수이다.
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
Arrays.sort(participant);
Arrays.sort(completion);
int i;
for ( i=0; i<completion.length; i++){
if (!participant[i].equals(completion[i])){
return participant[i];
}
}
return participant[i];
}
}
💡sort를 이용해 정렬을 해 주고 for 문에서 같은 열에 있는 이름을 비교해 같지 않다면 그 사람을 return 해준다.
여기서 i를 전역변수로 빼 줘서 마지막에 return participant[i];이 가능한 것.