개발공부/프로그래머스

[프로그래머스] 코딩테스트 Lv.1 완주하지 못한 선수

장아장 2022. 10. 28. 21:52

Source Code : https://github.com/JangAJang/Algorithm/blob/main/프로그래머스_Lv1/완주하지%20못한%20선수/src/Solution.java

 

생각보다 문제의 수준 자체는 높지 않았던 것 같다. 해시맵으로 도착한 사람의 value를 +1, 도착 명단에 없는 경우 -1을 해주면 되었다. 



private HashMap<String, Integer> includeParticipant(String[] par){
    HashMap<String, Integer> map = new HashMap<>();
    for(String s : par){
        includePersonToMap(s, map);
    }
    return map;
}


private void includePersonToMap(String s, HashMap<String, Integer> map){
    int count = 0;
    if(map.containsKey(s)){
        count = map.get(s);
        map.remove(s);
    }
    map.put(s, count+1);
}

 

같은 이름의 사람이 있으므로, 참여자들을 Map에 넣을 때, 원래 없었으면 count(=0)+1,

같은 이름의 사람이 있다면 count(=map.get()) + 1로 새롭게 넣어준다. 

 

이후, 도착자 명단에서 이름을 key로 받아 그 value를 -1해주면 된다. 



private void excludeCompletion(String[] com, HashMap<String, Integer> map){
    for(String s : com){
        map.replace(s, map.get(s), map.get(s)-1);
    }
}

 

이후 value가 0이 아닌 이름들을 리턴해주면 된다. 

 

난이도가 높아질 수록, 기본적인 array, list에서 set, hashmap으로 쓰기 좋은 자료형이 바뀌고 있다. 

 

후엔 람다식, 스트림도 배워서 써먹을 수 있으면 좋겠다. 

맨날 외부 코드를 참조해서 스트림, 람다를 쓰는게 아니라, 직접 머리속에서 생각해서 쓸 수 있으면 좋겠다.