본문 바로가기
알고리즘 문제 풀이

완주하지 못한 선수

by 가나무마 2021. 6. 12.
728x90

출처

 

코딩테스트 연습 - 완주하지 못한 선수

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수

programmers.co.kr

 

마라톤에 참가한 선수들의 배열이 participant 완주 성공한 사람들의 배열이 completion입니다.
완주하지 못한 사람 1명을 return 하시오.

 

[처음 푼 방법]
참가자들과 완주자들을 정렬합니다.
순서대로 참가자와 완주자들을 비교합니다.
참가자와 완주자가 같지 않은 경우, 그 참가자는 완주하지 못한 선수로 간주하고 값을 리턴합니다.
반복문을 다 돌았는데 같지 않은 경우가 없는 경우, 참가자(participant) 중 마지막 선수가 완주하지 못한 선수입니다.

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];
    }
}

[모법답안]
해쉬맵을 사용해서 key는 선수 이름 value는 인원수를 적는 것.
전에 푼 방법인데 다시 풀 땐 기억을 못하다가 다른 사람 풀이 보고 기억났음.

import java.util.HashMap;

class Solution {
    public String solution(String[] participant, String[] completion) {
        HashMap<String, Integer> hm = new HashMap<>();

        for (String part : participant) {
            if (hm.get(part) != null) {
                hm.put(part, hm.get(part)+1);
            } else {
                hm.put(part, 1);
            }
        }

        for (String comp : completion) {
            if (hm.get(comp) != 0) {
                hm.put(comp, hm.get(comp)-1);
            }
        }

        for (String key : hm.keySet()) {
            if (hm.get(key) != 0) {
                return key;
            }
        }

        return null;
    }
}
728x90
반응형