스크린샷 2019-10-30 오후 11 32 53

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class HashMaraton {


    public String solution(String[] participant, String[] completion) {

        Arrays.sort(participant);
        Arrays.sort(completion);


        int i = 0;
        for (i = 0; i < completion.length; i++) {
            if(!participant[i].equals(completion[i])){
               return participant[i];
            }
        }

        return participant[i];
    }


    public static void main(String[] args) {

        HashMaraton maraton = new HashMaraton();

        String[] participant = {"leo", "kiki", "kiki", "eden"};
        String[] completion = {"eden", "kiki"};

        System.out.println(maraton.solution(participant, completion));


    }
}

이 문제는 해시를 이용하여 푸는 문제입니다. 위의 코드는 해시를 사용하지 않고 정렬 후 단순히 participant와 completion 배열의 값을 비교하여
completion에 없는 참가자를 리턴하면 됩니다.

하지만 문제의 의도는 해시로 완주하지 못한 참가자의 이름을 리턴하라고 나왔기 때문에 아래코드와 같이 해시 맵을 이용해서 문제를 풀어보았습니다.

public String solution(String[] participant, String[] completion){        

        String answer = "";

        Map<String, Integer> map = new HashMap<>();

        for (String player : participant){

            if(map.containsKey(player)){
                map.put(player, map.get(player) + 1);
                continue;
            }
            map.put(player, 1);

        }

        for (String player : completion){
            if (map.containsKey(player)){
                map.put(player, map.get(player) - 1);
            }
        }


        Set<String> keySet = map.keySet();

        for (String key : keySet){

            if(map.get(key) != 0){
                answer = key;
            }
        }

        return answer;
 }

참조: 아래 코드는 8버전부터 JAVA에서 제공해주는 HashMap 메소드입니다. 중복체크를 할때 유용하게 사용 할 수 있습니다.
Map에서 원하는 key 값이 존재하지 않아도 기본적으로 value를 가지고 싶을때 사용하는 메소드입니다.

 for (String player : participant) map.put(player, map.getOrDefault(player, 0) + 1);

+ Recent posts