[프로그래머스] 완주하지 못한 선수 - Java, 자바

Kim Ji Eun·2022년 3월 7일
0

난이도

레벨 1

문제

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

풀이

풀이 1) 해시를 사용해 푸는 방법
participant를 반복문으로 돌리며, 해시에 key로 넣고 동명이인을 처리하도록 value에 개수도 넣어준다.
completion을 반복문으로 돌리며, 원소가 해시에 포함되는 키일 때 map의 value를 감소시킨다.
map을 반복문으로 돌리며 value가 0 이 아니라면 value가 0이 아닌 key를 출력한다 = 완주하지 못한 선수

 // 방법 1) 해시를 사용해 푸는 방법
    public String solution(String[] participant, String[] completion) {
        String answer = "";

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

        for (String arg : participant) {
            map.put(arg, map.getOrDefault(arg, 0) + 1);
        }
        for (String arg : completion) {
            map.put(arg, map.get(arg) - 1);
        }

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

풀이 2) 해시를 사용하지 않고 푸는 방법
정렬을 이용해서 문제를 해결했다.
두 배열을 정렬하고 같은 인덱스에 해당하는 값이 다를 때 값을 출력하도록 했다.
다만 같은 인덱스에 해당 값이 모두 동일할 경우 participant의 마지막 값이 완주하지 못한 선수이므로 처리

   // 방법 2) 해시를 사용하지 않고 푸는 방법
    public String solution2(String[] participant, String[] completion) {
        String answer = "";
        Arrays.sort(participant);
        Arrays.sort(completion);
        for(int i=0;i<participant.length-1;i++){
            if(!participant[i].equals(completion[i])){
                answer = participant[i];
                break;
            }
        }
        if(answer.equals("")){
            answer = participant[participant.length-1];
        }
        return answer;
    }

코드

package 해시;

import java.util.*;

public class 완주하지못한선수 {
    // 방법 1) 해시를 사용해 푸는 방법
    public String solution(String[] participant, String[] completion) {
        String answer = "";

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

        for (String arg : participant) {
            map.put(arg, map.getOrDefault(arg, 0) + 1);
        }
        for (String arg : completion) {
            map.put(arg, map.get(arg) - 1);
        }

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

    // 방법 2) 해시를 사용하지 않고 푸는 방법
    public String solution2(String[] participant, String[] completion) {
        String answer = "";
        Arrays.sort(participant);
        Arrays.sort(completion);
        for(int i=0;i<participant.length-1;i++){
            if(!participant[i].equals(completion[i])){
                answer = participant[i];
                break;
            }
        }
        if(answer.equals("")){
            answer = participant[participant.length-1];
        }
        return answer;
    }

}

https://junghn.tistory.com/entry/알고리즘-프로그래머스-완주하지-못한-선수-해시-1

profile
Back-End Developer

0개의 댓글

관련 채용 정보