수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
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])){
answer = participant[i];
break;
}
}
// 마지막 원소값이 미완주자인 경우
if(answer.equals("")) //true
answer = participant[participant.length-1];
return answer;
}
}
먼저, 두 배열을 똑같이 사전순으로 정렬을 하고, 두 배열을 비교하여 completion 완주자 배열에 없는 원소값을 찾는다(미완주자)
마지막 원소값이 미완주자라면, answer 문자열이 빈 문자열인지 확인(true)하고, 참가자 배열의 마지막 인덱스값을 answer에 저장한다.
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
// HashMap 생성
Map<String, Integer> map = new HashMap<>();
// 참가자 배열을 순회하며 해시맵에 각 참가자의 이름과 수를 기록
for(String num:participant){
map.put(num, map.getOrDefault(num, 0) + 1);
}
// 완주자 배열을 순회하며 해시맵에서 각 완주자의 이름을 찾아 수를 하나씩 감소
for (String c : completion) {
map.put(c, map.get(c) - 1);
}
// 해시맵에서 값이 1인 키를 찾아 그 이름이 완주하지 못한 선수
for (String key : map.keySet()) {
if (map.get(key) == 1) {
return key; // 완주하지 못한 선수
}
}
return "";
}
}