[99클럽 코테 스터디_ DAY 5] 마라톤 참가 선수

yewon·2024년 7월 30일
0

스터디

목록 보기
5/22
post-thumbnail
post-custom-banner

배열을 비교해 없는 값 찾아내기

✏️오늘의 문제 : 마라톤에 참가하지 않은 선수 찾아내는 함수 만들기



💡나의 풀이


    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;
    }
  1. participant 배열과 completion 배열을 오름차순으로 정렬합니다. 이렇게 하면 참가자 명단과 완주자 명단의 순서를 맞출 수 있습니다.
  2. 정렬된 두 배열을 순회하면서 각 인덱스의 이름이 다른지 확인합니다. 다른 이름이 발견되면 그 이름이 완주하지 못한 선수의 이름이므로 해당 이름을 반환합니다.
  3. 만약 모든 선수가 완주했다면, 참가자 명단의 마지막 선수가 완주하지 못한 선수의 이름이 됩니다.

이 코드는 정렬을 통해 참가자와 완주자의 순서를 맞추고, 순회하면서 차이나는 부분을 찾아내는 방식으로 문제를 해결합니다. 코드가 간결하고 이해하기 쉬우며, 시간 복잡도도 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;
    }
  1. answer 변수를 초기화하여 완주하지 못한 선수의 이름을 저장할 공간을 준비합니다.
  2. hm이라는 이름의 HashMap을 생성합니다. 이 HashMap은 선수의 이름을 키로, 해당 선수가 참가한 횟수를 값으로 저장합니다.
  3. participant 배열을 순회하면서, 각 선수의 이름을 키로 하여 HashMap에 저장합니다. 이때, 이미 존재하는 키라면 그 값을 1 증가시킵니다.
  4. completion 배열을 순회하면서, 각 선수의 이름을 키로 하여 HashMap에 저장된 값을 1 감소시킵니다.
  5. HashMap의 모든 키를 순회하면서, 값이 0이 아닌 키를 찾습니다. 이 키가 완주하지 못한 선수의 이름이 됩니다.
  6. 찾은 선수의 이름을 answer 변수에 저장하고, 이를 반환합니다.

이 코드의 장점은
1. 해시맵을 사용하여 참가자와 완주자의 정보를 효율적으로 관리할 수 있습니다.
2. 참가자와 완주자 명단을 한 번씩만 순회하면 되므로, 시간 복잡도가 O(n)으로 효율적입니다.
3. 코드가 간결하고 이해하기 쉽습니다.

다만, 이 코드는 메모리 사용량이 상대적으로 많다는 단점이 있습니다. 참가자 수가 많은 경우 해시맵의 크기가 커져 메모리 사용량이 증가할 수 있습니다.

post-custom-banner

0개의 댓글