본문 바로가기
정리/알고리즘

해시-완주하지못한선수

by Hudini30 2022. 2. 3.

프로그래머스(해시) 완주하지 못한 선수

입력으로 주어진 배열은 참석자/ 완주자 이고 이중 완주하지 못한 선수를 추출하는 문제입니다.

처음에 해결 방식으로는 이름을 KEY로 해시맵에 해당 이름의 참석자 수를 저장 한 후에 완주자 이름으로 해시맵에서 참석 자 수를 꺼내 카운트를 줄이는 방식으로 진행했습니다.

해시방식

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        Map<String, Integer> participantMap = new HashMap<>();
        for(String name : participant) {
            participantMap.put(name, participantMap.getOrDefault(name, 0) + 1);
        }

        for (String name : completion) {
            int count = participantMap.getOrDefault(name, 0) - 1;
            if (count == 0) {
                participantMap.remove(name);
            } else {
                participantMap.put(name, count);
            }
        }

        for(String key : participantMap.keySet()) {
            answer =  key;
        }

        return answer;
    }
}

정렬방식

다른 방향으로 생각해보면 한명의 참석자만 없기때문에 참석자, 완주자를 정렬 한 후에 서로 비교해 가다가 참석자와 완주자가 다른 경우가 바로 완주하지 못한 참석자라는 것으로 바로 추출할 수 있다는 것을 알수 있습니다.

import java.util.Arrays;

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

        Arrays.sort(participant);
        Arrays.sort(completion);

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

        return participant[participant.length - 1];
    }
}

코드는 더 간단해 진것으로 보이나 두개다 정렬해야 해서 비용이 더 들수도 있다고 생각되네요.

네이버블로그

'정리 > 알고리즘' 카테고리의 다른 글

해시 - 베스트앨범  (0) 2022.02.04
스택/큐 - 프린터  (0) 2022.02.03
스택/큐 - 기능개발  (0) 2022.02.03
해시 - 위장  (0) 2022.02.03
해시 -전화번호목록  (0) 2022.02.03

댓글