알고리즘

프로그래머스 - 완주하지 못한 선수

계양 꿀주먹 2024. 5. 2. 12:08

 


 

 

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        Map<String, Integer> map = new HashMap<>();
        
        for (String player : participant) map.put(player, map.getOrDefault(player, 0) + 1);
        
        for(String player : completion) {
            if(map.get(player) == 1) map.remove(player);
            else {
                int n = map.get(player);
                map.put(player, n - 1);
            }
        }
        
        for(String player : map.keySet()) answer = player;
        
        return answer;
    }
}

 

HashMap을 사용해 푸는 문제였습니다.

참가한 선수 중 동명이인이 있을 수 있으므로, 이름을 key, 이름을 가진 사람 수를 value로 하였고 완주자 목록에서 map을 순회할 때 한 명만 남았다면 삭제 후 남아있는 Key를 조회해 값을 찾았습니다.

 


 

글을 작성하다 굳이 시간을 소모해 삭제를 할 필요가 없을 것 같아 코드를 수정하고 다듬어 효율성 테스트를 진행했습니다.

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        Map<String, Integer> map = new HashMap<>();
        
        for (String player : participant) map.put(player, map.getOrDefault(player, 0) + 1);
        for(String player : completion) map.put(player, map.get(player) - 1);
        
        for(String player : map.keySet()) {
            if(map.get(player) == 1) {
                answer = player;
                break;
            }
        }
        
        return answer;
    }
}