지구정복

[해쉬] 프로그래머스 - 완주하지 못한 선수 본문

데이터 엔지니어링 정복/Algorithm

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

nooh._.jl 2021. 4. 11. 17:10
728x90
반응형

programmers.co.kr/learn/courses/30/lessons/42576?language=java

 

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

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

programmers.co.kr


내 풀이

더보기
import java.util.Arrays;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        //참가선수, 완주선수 배열을 모두 오름차순 정렬한다.
        Arrays.sort( participant );
        Arrays.sort( completion );
    
        //반복문 돌면서 참가선수와 완주선수 이름이 같지 않다면 answer정의
        for( int i=0; i<completion.length; i++ ) {
            if( !participant[i].equals( completion[i] ) ) {
                answer = participant[i];
                break;
            }    
        }          
        
        return answer;
    }
}

해시맵을 이용한 풀이

더보기
import java.util.HashMap;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        //해시맵 선언 <선수명, 값>
        HashMap<String, Integer> hm = new HashMap<>();
        
        //참가선수를 해시맵에 넣는다. 이때 동명이인이 있을 수 있으니 .getOrDefault메소드 사용
        for (String player : participant) hm.put(player, hm.getOrDefault(player, 0) + 1);
        
        //완주선수는 해시맵에서 값을 1씩빼준다.
        for (String player : completion) hm.put(player, hm.get(player) - 1);

        //해시맵에서 0이 아닌 선수를 찾는데 무조건 1명이다.
        for (String key : hm.keySet()) {
            if (hm.get(key) != 0){
                answer = key;
                break;
            }
        }
        return answer;
    }
}

 

 

728x90
반응형
Comments