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

LDH·2021년 3월 3일
0

🔑알고리즘

목록 보기
1/9
post-thumbnail

✨Link 완주하지 못한 선수

🤔 문제

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

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

입출력 예

participant: ["mislav", "stanko", "mislav", "ana"]
completion: ["stanko", "ana", "mislav"]
return: "mislav"

💡 접근

배열 participant와 completion를 정렬 해준뒤,
(참가자 = 완주자+1) 완주자를 기준으로 for문을 돌리면서 이름이 다른것을 찾는다. 정렬된 마지막 완주자까지 동일하다면 정렬된 참가자가 완주하지 못한것이다.

💻 코드(1)_나의 풀이

class Solution {
    public String solution(String[] participant, String[] completion) {
        List<String> participant2=new ArrayList<>();
        List<String> completion2=new ArrayList<>();
        
        for(String st:participant) {
        	participant2.add(st);
        }
        for(String st:completion) {
        	completion2.add(st);
        }
        participant2.sort(null);
        completion2.sort(null);
        
        for(int i=0;i<completion2.size();i++) {
        	if(!participant2.get(i).equals(completion2.get(i))) {
        		return participant2.get(i).toString();
        	}
        }
        
        return participant2.get(participant2.size()-1).toString();
    }
}
  • 배열 정렬 할때,
    array.sort(); 배열 정렬하는 것을 잊어버리고 굳이 리스트에 담아서 정렬을 했다...😅
  • list.sort(null)은 list.sort(Comparator.naturalOrder())와 동일하다!

💻 코드(2)_다른사람 풀이

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        HashMap<String, Integer> hm = new HashMap<>();
        for (String player : participant) hm.put(player, hm.getOrDefault(player, 0) + 1);
        for (String player : completion) hm.put(player, hm.get(player) - 1);
 
        for (String key : hm.keySet()) {
            if (hm.get(key) != 0){
                answer = key;
            }
        }
        return answer;
    }
}
[출처] 완주하지 못한 선수(Hash)|작성자 달이집사
  • 참가자를 해시맵에 넣을때, 동명이인을 고려하여 해시맵(key:이름, value:수)에 담아주었다.
    완주자로 for문을 돌려 이름에 대한 값을 -1씩 해주었고, 값이 0이 아닌것을 출력해 주었다.
  • default V getOrDefault(Object key, V defaultValue)
    찾는 키가 존재한다면 찾는 키의 값을 반환하고 없다면 기본 값을 반환한다.
profile
💻💻💻

0개의 댓글