해시_완주하지 못한 선수

H802·2025년 1월 21일

코딩 테스트

목록 보기
7/11

📘 문제 설명

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.

마라톤에 참여한 선수들의 이름이 담긴 배열 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에 저장한다.


📑 두번째 풀이 (HashMap 이용)

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 "";
    }
}

❗❗ Map 인터페이스의 메서드

1. map.put(key, value)

  • 키와 값을 맵에 추가하거나 업데이트 // 키에 값을 저장
  • 키가 이미 맵에 존재하면 해당 기존값 반환
  • 키가 없으면, null 반환

2. map.get(key)

  • 키에 해당하는 값을 반환
  • 없으면, null 반환

👀 문제 출처

profile
배운 내용 정리하기 위해 쓰는 블로그

0개의 댓글