알고리즘 공부/문제 풀이

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

valid_ming 2020. 8. 28. 22:17

처음에 ArrayList에 중복 값이 있어도 remove를 하면 하나의 값만 지워진다는 사실을 알고,

중복 처리를 안해도 되겠구나! 생각해서 ArrayList를 이용하여 문제를 해결하였다.

 

        ArrayList<String> p=new ArrayList<>();
        
        for(int i=0;i<participant.length;i++) p.add(participant[i]);
        

        for(int i=0;i<completion.length;i++) {
        	p.remove(completion[i]);
        }
        
        answer=p.get(0);

 

하지만.. 효율성에서 시간 초과 문제로 실패하게 되었고..

문제 분류가 해시이니.. hashMap을 이용하여 문제를 풀었다.

key는 사람 이름이고 value는 사람 수를 이용하여 중복을 처리하였다.

 

	static String solution(String[] participant, String[] completion) {
        String answer = "";

        HashMap<String,Integer> map=new HashMap<>();
        
        //map초기화 
        for(int i=0;i<participant.length;i++) {
        	//중복 이름 value 늘리기
        	if(map.containsKey(participant[i])) {
        		int val=map.get(participant[i]);
        		map.replace(participant[i], val+1);
        	}
        	else map.put(participant[i], 1);
        }
        
        for(int i=0;i<completion.length;i++) {
        	String key=completion[i];
        	if(map.get(key)==1) map.remove(key);
        	else {
        		int val=map.get(key);
        		map.replace(key, val-1);
        	}
        }
       
        Set<String> key=map.keySet();
        Iterator<String> it=key.iterator();
        answer=it.next();
        
        return answer;
    }