삽질메모장

programmers : hash 1 (완주하지 못한 선수)[java] 본문

Knowledge/알고리즘

programmers : hash 1 (완주하지 못한 선수)[java]

shovel 2022. 1. 11. 15:59

https://programmers.co.kr/learn/courses/30/lessons/42576

 

코딩테스트 연습 - 완주하지 못한 선수

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

programmers.co.kr

 

로직은 간단하지만 java.util.map class의 getOrDefault method 의 활용성을 보여줄수있는 문제이다.

 

- getOrDefault​(Object key, V defaultValue) - 공식 api document

https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/util/Map.html#getOrDefault(java.lang.Object,V)

첫번째 인자의 map변수의 palyer key가 존재하면 해당 value를 그렇지 않다면

두번째 인자의default value (여기선0) 를 반환해주는 함수다

 

- solution

참가자 명단을 모두 map put / 모두 0+1, 중복이라면  1+1 되어서 2로 저장

완주자 명단을 모두 map put / 명단에 존재한다면 -1 연산하여 모두 0, 중복이면 1, 명단에 없으면 -1 

마지막 반복문에서 value가 0이 아닌(중복이거나 완주를 못한) 선수의 이름을 answer에 저장하여 반환

import java.util.HashMap;


class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        HashMap<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 key : map.keySet()) {
        	if(map.get(key) != 0) {
        		answer = key;
        	}
        }
        
        return answer;
    }
}