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

앙이🐯·2022년 4월 12일
0

알고리즘

목록 보기
15/22

프로그래머스: 완주하지 못한 선수

1. 문제 설명

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

마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

  • 제한사항
    * 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
    * completion의 길이는 participant의 길이보다 1 작습니다.
    * 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
    * 참가자 중에는 동명이인이 있을 수 있습니다.
  • 입출력 예제

    participantcompletionreturn
    ["leo", "kiki", "eden"]["eden", "kiki"]"leo"
    ["marina", "josipa", "nikola", "vinko", "filipa"]["josipa", "filipa", "marina", "nikola"]"vinko"
    ["mislav", "stanko", "mislav", "ana"]["stanko", "ana", "mislav"] "mislav"
  • 입출력 예 설명

  1. "leo"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
  2. "vinko"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
  3. "mislav"는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.

2. 문제 풀이

* 방법 1: Sort 이용

  1. Participant 배열과 Completion 배열을 순서대로 정렬
  2. 정렬한 배열을 비교해서 일치하지 않는 선수의 인덱스를 리턴하면 참가하지 않는 선수의 명단을 구할 수 있다.
코드 1: Sort 사용
import java.util.*;

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(!participant[i].equals(completion[i])){
               answer+=participant[i];
               return answer; 
           } 

       }

       answer+=participant[participant.length-1];
       return answer;
   }
} 
코드 1: 실행 결과



* 방법 2: HashMap 사용

  1. HashMap에 Participant의 참가자를 key 값으로 하고 value에 +1을 넣어준다.
  2. 이 해시 맵을 이용해 Completion의 명단이 HashMap에 key 값에 존재하면 value에 -1 한다.
  3. 각 key값의 value값이 0이 아닌 경우 완주하지 못한 명단을 구할 수 있다.
getOrDefault(Object key, V DefaultValue) : 찾고 있는 키의 값을 반환하고 없다면 기본 값을 반환하는 메서드

// key : 값을 가져와야 하는 요소의 키
// defaultValue : 지정된 키로 매핑된 값이 없는 경우 반환되어야 하는 기본값
// 반환 값 : 찾는 key가 존재하면 해당 key에 매핑된 값을 반환하고, 아니면 디폴트 값 반환
코드 2: HashMap
import java.util.*;

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

       for(String person: participant){
           hash.put(person,hash.getOrDefault(person, 0)+1);
       }

       for(String person: completion){
           hash.put(person, hash.getOrDefault(person, 0)-1);
       }

       for(String key:hash.keySet()){
           if(hash.get(key)>0){
               answer=key;
               break;
           }
       }

       return answer;
   }
}
코드 2: 실행 결과

0개의 댓글