알고리즘

[알고리즘] 프로그래머스 - 완주하지 못한 선수 (Java)

오늘보다 더 나은 내일을 위해 2021. 2. 1. 23:23

문제 : programmers.co.kr/learn/courses/30/lessons/42576

 

처음 풀었을 때 코드

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
       String answer = "";

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

 

중첩된 for문을 쓰기 때문에 복잡도가 O(n*n)이 되기때문에 코드 효율성이 낮다.

해시를 사용하면 빠르고 효율적으로 해결 할 수 있다고 하여 HashMap을 공부하고 다시 풀어보았다.

 

 

HashMap을 적용한 코드

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        Map<String, Integer> h = new HashMap<>();
       
        for(String partic : participant){
            if(h.get(partic) == null)
                h.put(partic, 1); 
            else{	
            // 중복된 이름인 경우 value 값을 하나 더해준다
                h.put(partic, h.get(partic)+1);
            }
        }

        for(String comple: completion){
        // 참가자 명단에 있는 이름인 경우에는 value값을 하나 빼준다
            if(h.get(comple) != null)	
                h.put(comple, h.get(comple)-1);
        }
 
        for(String key : h.keySet()){
            if(h.get(key) != 0){
                answer = key;
            }
        }
        
        return answer;
    }
}