Programmers - 완주하지 못한 선수

dropKick·2020년 7월 13일
0

코딩테스트

목록 보기
10/17

풀이

  • 해시라고 써져있으니 해시 문제
    근데 배열로 먼저 풀었음

코드

시간 초과 효율성 0점

 public String solution(String[] participant, String[] completion) {
        StringBuilder answer = new StringBuilder();
        for (String s : participant) {
            boolean completed = true;
            for (int j = 0; j < completion.length; j++) {
                if (s.equals(completion[j])) {
                    completion[j] = null;
                    completed = false;
                    break;
                }
            }
            if (completed) {
                answer.append(s);
            }
        }
        return answer.toString();
    }

배열이 전혀 정렬 되어있지 않다보니 O(n2)O(n^2)의 시간으로 시간 초과..
string builder 사용했는데 부질없는 짓이였음 ㅎㅎ
내 생각으로는 Map을 통해 해시 테이블을 사용하거나 배열을 정렬해야할 것 같음
내일 다시 해보기로

HashMap<K, V> 사용

 public String solution(String[] participant, String[] completion) {
        String answer = "";
        int count = 0;
        HashMap<String, Integer> hashMap = new HashMap<>();

        for (String name : participant) { // 참가자 체크, 해시맵 삽입
            if (hashMap.get(name) == null) {
                hashMap.put(name,1);
            } else {
                count = hashMap.get(name) + 1;
                hashMap.put(name, count);
            }
        }

        for (String complement : completion) { // 항상 1 작기 때문에 -1 후 get, 완주자 삽입
            count = hashMap.get(complement) - 1;
            hashMap.put(complement, count);
        }

        for (String name : hashMap.keySet()) { // 
            if (hashMap.get(name) == 1) {
                answer = name;
            }
        }
        return answer;
    }

0개의 댓글