[Programmers] 완주하지 못한 선수 -JAVA

Lee 🧙🏻‍♂️·2021년 8월 19일
0
post-thumbnail

📄 문제 설명

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

마라톤에 참여한 서수들의 이름이 담긴 배열 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"

👨🏻‍💻 내가 작성한 코드

import java.util.*;
class Solution {
    public String solution(String[] participant, String[] completion) {
       String answer =""; 	 
	HashMap<String, Integer> noFinish = new HashMap<>(); 
	  
           for(String player : participant) 
	      noFinish.put(player, noFinish.getOrDefault(player, 0) + 1); 	
	   for(String player : completion) 
	      noFinish.put(player, noFinish.get(player) -1); 
	   for(String key : noFinish.keySet()) { //keySet은 key값만 가져온다.
	      if(noFinish.get(key) != 0) { 
	         answer = key; 
		 break; 
	      } 
	    }
            return answer;
   }
}

👨🏻‍🏫 코드 풀이

  • getOrDefault : 찾는 키가 존재한다면 찾는 키의 값을 반환하고 없다면 기본 값을 반환한다.

    사용법
    getOrDefault(Object key, V DefaultValue)

    매개 변수 : 이 메서드는 두 개의 매개 변수를 허용한다.
  • key : 값을 가져와야 하는 요소의 키이다.
  • defaultValue : 지정된 키로 매핑된 값이 없는 경우 반환되어야 하는 기본값.

map.put(player라는 키, player의 값이 존재하면 player의 값을 넣어주고 없다면 0), 그리고 + 1
즉, getOrDefault는 중복값을 가려내기 위해 쓴 함수이다.

💡 다른 사람 코드

import java.util.*;
class Solution {
    public String solution(String[] participant, String[] completion) {
        Arrays.sort(participant);
        Arrays.sort(completion);
        int i;
        
        for ( i=0; i<completion.length; i++){
            if (!participant[i].equals(completion[i])){
                return participant[i];
            }
        }
        return participant[i];
    }
}

💡sort를 이용해 정렬을 해 주고 for 문에서 같은 열에 있는 이름을 비교해 같지 않다면 그 사람을 return 해준다.
여기서 i를 전역변수로 빼 줘서 마지막에 return participant[i];이 가능한 것.

profile
더 나은 개발자가 되기 위해 기록합세!🧙🏻‍♂️

0개의 댓글