본문 바로가기
코딩테스트/프로그래머스

[프로그래머스/Java] LV.1 완주하지 못한 선수

by ⓞㅖ롱 2022. 8. 16.

해시관련 문제이다.

 

결국 participant에 하나 더 있는 참여자를 찾아내야 하는데, 문제는 동명이인이 있을 시다.

이름을 가지고 중복제거 해버리면 동명이인은 함께 사라지기 때문에 주의가 필요하다.

 

내 코드

import java.util.HashMap;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        HashMap<String, Integer> map = new HashMap<>();
        
        //참여자 이름이 map에 없을경우 value = 1 로 삽입
        for(String name : participant) 
            map.put(name, map.getOrDefault(name, 0) + 1);
        
        //완주자 value 1씩 감소
        for(String name : completion)
            map.put(name, map.get(name) - 1);
        
        //value = 1인 참여자가 완주하지 못한 참여자
        for(String key : map.keySet())
        {
            if(map.get(key) > 0){
                answer = key;
                break;
            }
        }
            
        return answer;
    }
}

정렬을 이용한 방법도 있었지만 해시관련 문제라 해시함수를 사용해 풀려고 노력했다.

결국.. 풀지 못해서 다른 사람 코드를 참고했는데 내가 헤맸던건 Hash API를 잘 알지 못해서였다.

해시함수는 따로 한번 더 정리하기로...