알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

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

 

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

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

programmers.co.kr


Think🤔

문제 이해

마라톤 선수 1 ~ 100,000명

마라톤 선수 참여 이름 participant 

완주한 이름 배열        completion

동명이인 ok , 참가자 이름 1~20 소문자

 

참여자에 있고 , 완주자 명단에 없으면 return 

 

문제가 해시니깐 해시로 풀어본다.

 

Map에는 iterator가 없다.

Map의 iterator를 가져오려면 keySet() , entrySet() , values()를 호출해서 가져와야 한다.

 

엔트리는 <키,밸류>를 쌍으로 묶는 것

한 쌍을 엔트리라고 한다.

 

고로 이터레이터를 이용해서 컬렉션을 읽어야 하는데 , Map은 컬렉션프레임워크가 아니여서

엔트리 셋으로 키랑 밸류를 가져와서 iterator를 만들어주고

순서대로 넣은 iter의 다음값을 entry 변수를 만들어줘서, 엔트리의 밸류값이 0이라면

그 값의 키 값을 answer에 담아서 break(찾았으니깐 더 볼 것 없이 종료) 해서 return을 해주면 된다.


Solution✍
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
         
        HashMap<String, Integer> hs = new HashMap<String,Integer>();
        
        for(String pars : participant){
            hs.put(pars,hs.getOrDefault(pars,0)+1);
        }
        
        for(String comps : completion){
            hs.put(comps,hs.get(comps)-1);
        }
        
        Iterator<Map.Entry<String,Integer>> iter = hs.entrySet().iterator();
        while(iter.hasNext()){
            Map.Entry<String,Integer> entry = iter.next();
            if(entry.getValue() != 0){
                answer = entry.getKey();
                break;
            }
        }
        
        return answer;
    }
}

Review🤩

참조 영상 https://www.youtube.com/watch?v=7qV5nJ39Lqw 


 

+ Recent posts