[프로그래머스] 알고리즘 고득점 Kit - 해시 | Lv1 완주하지 못한 선수

EllievV·2024년 10월 7일

🐊 CodingTest

목록 보기
3/18

참고 : https://houcouonchi.tistory.com/30

🔍 문제 보러 가기

문제 설명

마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 찾는 문제

접근 방법

  1. HashMap을 만든다
  2. 참가자를 +1 한다.
  3. 완주자를 -1 한다.
  4. 최종적으로 Map에 1이 남은 사람이 완주하지 못한 선수이다.

정답 코드

import java.util.*;

class Solution {
		public String solution(String[] participant, String[] completion) {
						
             Map<String, Integer> map = new HashMap<>();
				
			// 모든 참가자를 map에 추가
        	for (String p : participant) {
            	map.put(p, map.getOrDefault(p, 0) + 1);
        	}

            // 완주자를 map에서 감소
            for (String c : completion) {
                map.put(c, map.get(c) - 1);
            }
        
			// 완주하지 못한 참가자 찾기
        	for (String key : map.keySet()) {
            	if (map.get(key) > 0) {
                	return key; // 완주하지 못한 참가자 반환
            	}
       	 	}
        
        	return ""; // 완주하지 못한 참가자가 없을 경우 빈 문자열 반환
	}
}

point

1. HashMap<String, Integer> 형식 사용

처음에는 <String, Boolean> 형식으로 데이터를 저장했으나, 이 경우 동명이인에 대한 처리를 놓치게 된다.
따라서 동명이인이 있을 수 있는 상황을 고려하여 <String, Integer> 형식으로 데이터를 저장한다.

0개의 댓글