본문 바로가기

알고리즘

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

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class algo {

    public static void main(String[] args) {
        String[] participant = {"leo", "kiki", "eden"};
        String[] completion  = {"eden", "kiki"};

        solution(participant, completion);
    }

    public static class MarathonInfo {
        String[] participants;
        String[] completions;

        HashMap<String, Integer> marathonDetailInfo = new HashMap<>();

        public MarathonInfo(String[] participants, String[] completions, HashMap<String, Integer> marathonInfo) {
            this.participants = participants;
            this.completions = completions;
            this.marathonDetailInfo = marathonInfo;
        }
    }

    public static void calculateParticipantNum(MarathonInfo marathonInfo) {
        Arrays.stream(marathonInfo.participants).forEach((participant) -> {
            int curParticipantNum = marathonInfo.marathonDetailInfo.getOrDefault(participant, 0);
            marathonInfo.marathonDetailInfo.put(participant, curParticipantNum + 1);
        });
    }

    public static void calculateNoCompleParticipantNum(MarathonInfo marathonInfo) {
        Arrays.stream(marathonInfo.completions).forEach((completion) -> {
            int curParticipantNum = marathonInfo.marathonDetailInfo.get(completion);
            int completionParticipantNum = 1;
            marathonInfo.marathonDetailInfo.put(completion, curParticipantNum - completionParticipantNum);
        });
    }

    public static String getNoCompletionParticipant(MarathonInfo marathonInfo) {
        calculateNoCompleParticipantNum(marathonInfo);

        return marathonInfo.marathonDetailInfo.entrySet()
                .stream()
                .filter(part -> part.getValue() > 0)
                .map(part -> part.getKey())
                .collect(Collectors.joining());
    }

    public static String solution(String[] participants, String[] completions) {
        MarathonInfo marathonInfo = new MarathonInfo(participants, completions, new HashMap<>());

        calculateParticipantNum(marathonInfo);

        return getNoCompletionParticipant(marathonInfo);
    }
}

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

프로그래머스 더 맵게  (0) 2022.01.31
프로그래머스 가장큰수  (0) 2022.01.30
프로그래머스 베스트앨범  (0) 2022.01.28
프로그래머스 위장  (0) 2022.01.27
프로그래머스 완주하지 못한 선수  (0) 2022.01.27