✏️오늘의 문제 : 마라톤에 참가하지 않은 선수 찾아내는 함수 만들기
public String solution(String[] participant, String[] completion) {
String answer = "";
Arrays.sort(participant);
Arrays.sort(completion);
int i;
for (i = 0; i < completion.length; i++) {
if (!participant[i].equals(completion[i])) {
answer = participant[i];
break;
}
}
if (answer.equals("")) {
answer = participant[participant.length - 1];
}
return answer;
}
participant
배열과 completion
배열을 오름차순으로 정렬합니다. 이렇게 하면 참가자 명단과 완주자 명단의 순서를 맞출 수 있습니다.이 코드는 정렬을 통해 참가자와 완주자의 순서를 맞추고, 순회하면서 차이나는 부분을 찾아내는 방식으로 문제를 해결합니다. 코드가 간결하고 이해하기 쉬우며, 시간 복잡도도 O(n log n)으로 효율적입니다.
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;
}
answer
변수를 초기화하여 완주하지 못한 선수의 이름을 저장할 공간을 준비합니다.hm
이라는 이름의 HashMap을 생성합니다. 이 HashMap은 선수의 이름을 키로, 해당 선수가 참가한 횟수를 값으로 저장합니다.participant
배열을 순회하면서, 각 선수의 이름을 키로 하여 HashMap에 저장합니다. 이때, 이미 존재하는 키라면 그 값을 1 증가시킵니다.completion
배열을 순회하면서, 각 선수의 이름을 키로 하여 HashMap에 저장된 값을 1 감소시킵니다.answer
변수에 저장하고, 이를 반환합니다.이 코드의 장점은
1. 해시맵을 사용하여 참가자와 완주자의 정보를 효율적으로 관리할 수 있습니다.
2. 참가자와 완주자 명단을 한 번씩만 순회하면 되므로, 시간 복잡도가 O(n)으로 효율적입니다.
3. 코드가 간결하고 이해하기 쉽습니다.
다만, 이 코드는 메모리 사용량이 상대적으로 많다는 단점이 있습니다. 참가자 수가 많은 경우 해시맵의 크기가 커져 메모리 사용량이 증가할 수 있습니다.