개발자는 기록이 답이다

[프로그래머스][Java][Lv.1] 완주하지 못한 선수 본문

알고리즘/프로그래머스

[프로그래머스][Java][Lv.1] 완주하지 못한 선수

slow-walker 2023. 10. 3. 12:49

 

https://school.programmers.co.kr/learn/courses/30/lessons/42576

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내가 푼 풀이 - 해쉬맵 사용

import java.util.*;
class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        HashMap<String, Integer> map = new HashMap<>();
        for (String x : participant) {
            map.put(x, map.getOrDefault(x, 0) + 1);
        }
        for (String x : completion) {
            map.put(x, map.get(x) - 1);
            if (map.get(x) == 0) map.remove(x);
        }

        for (String x : map.keySet()) {
            answer = x;
        }
        return answer;
    }
}
정확성 테스트
테스트 1 통과 (0.06ms, 73.8MB)
테스트 2 통과 (0.06ms, 75MB)
테스트 3 통과 (0.62ms, 80MB)
테스트 4 통과 (1.74ms, 72MB)
테스트 5 통과 (1.57ms, 88.6MB)
테스트 6 통과 (0.03ms, 74.3MB)
테스트 7 통과 (0.06ms, 72.6MB)
효율성 테스트
테스트 1 통과 (48.38ms, 83.8MB)
테스트 2 통과 (62.18ms, 89.3MB)
테스트 3 통과 (81.44ms, 94.1MB)
테스트 4 통과 (89.08ms, 96MB)
테스트 5 통과 (103.93ms, 95.3MB)

 

 

다른 사람 풀이 - 정렬 사용

정렬해서 풀면 효율성이 엄청 떨어진다

import java.util.*;
class Solution {
    public String solution(String[] participant, String[] completion) {
        Arrays.sort(participant);
        Arrays.sort(completion);
        int i;
        for (i=0; i <completion.length; i++){

            if (!participant[i].equals(completion[i])){
                return participant[i];
            }
        }
        return participant[i];
    }
}
정확성 테스트
테스트 1 통과 (0.19ms, 72.7MB)
테스트 2 통과 (0.25ms, 74MB)
테스트 3 통과 (1.56ms, 81.1MB)
테스트 4 통과 (2.62ms, 75.8MB)
테스트 5 통과 (2.47ms, 78.8MB)
테스트 6 통과 (0.17ms, 73.2MB)
테스트 7 통과 (0.23ms, 81MB)
효율성 테스트
테스트 1 통과 (146.17ms, 81.7MB)
테스트 2 통과 (205.73ms, 88.4MB)
테스트 3 통과 (249.85ms, 90.7MB)
테스트 4 통과 (309.28ms, 95.7MB)
테스트 5 통과 (265.45ms, 97.5MB)