티스토리 뷰

반응형

프로그래머스 알고리즘 - 완주하지 못한 선수

프로그래머스 완주하지 못한 선수 문제 링크


문제를 풀기위한 로직은 여러가지가 존재할 것이고, 많이 어렵진 않았습니다. 다만 문제에서 효율성 검사도 진행하기 때문에 효율성에 대한 고민이 없다면은 시간 초과가 나오게 됩니다. (실제로 가벼운 마음으로 무식하게 풀었더니 시간 초과가 나왔습니다.) 힌트는 문제의 분류에 있습니다. 바로 '해시'를 이용하는 것인데요. 자바에서의 HashMap만 사용하여도 검색시간이 많이 줄어서 바로 통과 할 수 있습니다.


문제가 조금 모호하긴 합니다. 동명이인인 선수가 존재하나 완주하지 못한 선수는 오직 한명이기 때문에 동명이인인 선수가 몇명인지만 확인하면 됩니다. (이럴꺼면 문제 이름이 '완주하지 못한 선수'보다는 '마지막으로 들어온 선수의 이름'이 더 적절해 보입니다.) HashMap의 key로 선수의 이름을 저장하고, 그 선수가 몇명있는지 value로 저장합니다. 그리고 완주 선수를 확인하면서 value값을 조정하는데, 조정 후에 value가 1인 key값이 정답이 됩니다.


풀이코드(java)

class Solution {
    public String solution(String[] participant, String[] completion) {
        HashMap hashMap = new HashMap<>();
        for (String part : participant) {
            if (hashMap.containsKey(part)) {
                hashMap.put(part, hashMap.get(part) + 1);
            } else {
                hashMap.put(part, 1);
            }
        }

        for (String comp : completion) {
            hashMap.put(comp, hashMap.get(comp)-1);
        }

        for (Map.Entry stringIntegerEntry : hashMap.entrySet()) {
            if (stringIntegerEntry.getValue() > 0) {
                return stringIntegerEntry.getKey();
            }
        }
        return null;
    }
}


반응형
댓글