JAVA/프로그래머스

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

배고파요 2024. 8. 30. 16:32
728x90

 

 

📍 생각 포인트.

  • Hash 의 특징을 활용해야함.
  • Hash 는 동일 Key가 있으면, 그 Key 를 덮어쓰기 한다는 점.
  • map.getOrDefault(가져올 키, 디폴트 값)
  • map.put( key, map.getOrDefault(key, 0) + 1 )
    • map 에 이미 key 가 있다면? --> 그 key 의 value 를 가져와서 +1 한다.
    • map 에 key 가 없다면? --> map.put(key, 0+1) 을 하겠다.

 

import java.util.*;


class Solution {
    private String rtnKey = "";
    
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        /* 1차 시도 :: 효율성 탈락!!
        ArrayList<String> pList = new ArrayList<>(Arrays.asList(participant));
        ArrayList<String> cList = new ArrayList<>(Arrays.asList(completion));
        
        HashMap<String, Integer> pHashMap = new HashMap<>();
        HashMap<String, Integer> cHashMap = new HashMap<>();
        
        for(String p : participant){
            pHashMap.put(p, Collections.frequency(pList, p) );
        }
        for(String c : completion){
            cHashMap.put(c, Collections.frequency(cList, c) );
        }
        
        pHashMap.forEach((key, value) -> {	
            if(cHashMap.get(key) == null || cHashMap.get(key) != value){
                rtnKey = key;
            }
        });	
        
        answer = rtnKey;
        */
        
        
        
        HashMap<String, Integer> map = new HashMap<>(); 
        for (String player : participant){ 
       	    //getOrDefualt : player의 값을 가진 key를 가져와서 없으면 0을 가져와서 1을 더하고, 있으면 그 값을 가져와서 1을 더한다.
            map.put(player, map.getOrDefault(player, 0) + 1); 
        }
        
        //System.out.println(map);
        
        //Hash map에서 완주한 사람 빼기
        for (String player : completion){
             //기존의 있던 값을 가져와서 -1 한다
             map.put(player, map.get(player) - 1); 
        }
        
        /*for(string key : map.keySet()){
        if(map.get(key) != 0){
        answer = key;
        break;
        }*/
        //위의 코드 대신 아래 코드도 사용가능. EntrySet이 반복문을 사용할때 속도가 더 빠름.
        Iterator<Map.Entry<String, Integer>> iter = map.entrySet().iterator(); 
        while(iter.hasNext()){ 
            Map.Entry<String, Integer> entry = iter.next(); 
            if (entry.getValue() != 0){ 
                answer = entry.getKey();
                break; 
               } 
          } 
        return answer; 
        }
}

 

 


출처 : 

https://velog.io/@stella317/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%99%84%EC%A3%BC%ED%95%98%EC%A7%80-%EB%AA%BB%ED%95%9C-%EC%84%A0%EC%88%98

 

https://junghn.tistory.com/entry/JAVA-Map-getOrDefault-%EC%9D%B4%EB%9E%80-%EC%82%AC%EC%9A%A9%EB%B2%95-%EB%B0%8F-%EC%98%88%EC%A0%9C#google_vignette

 

 

https://kumgo1d.tistory.com/entry/Java-HashMap%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-%EA%B0%99%EC%9D%80-%EA%B0%92%EC%9D%84-%EA%B0%80%EC%A7%84-%EB%B0%B0%EC%97%B4Array%EC%9D%98-%EC%9A%94%EC%86%8C%EA%B0%92-%EB%B6%84%EB%A5%98

 

 

https://onlyfor-me-blog.tistory.com/319

 

 

https://babgeuleus.tistory.com/entry/Map%EC%9D%98-EntrySet%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9E%90%EC%84%B8%ED%95%9C-%EC%84%A4%EB%AA%85%EB%A7%B5%EC%9D%84-%ED%83%90%EC%83%89%ED%95%98%EB%8A%94-4%EA%B0%80%EC%A7%80-%EB%B0%A9%EB%B2%95

 


개발 공부를 위한 블로그 입니다. 

오류가 있다면 댓글로 알려주세요! 

감사합니다.

 

 

728x90