Development Logs/Algorithms

[JAVA] 프로그래머스: 완주하지 못한 선수 (코딩테스트 고득점 kit > 해쉬)

유뱅유뱅뱅 2020. 7. 11. 22:04

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

 

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

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

programmers.co.kr

첫번째 풀이

해결방안

참가자들 전원을 HashMap에 넣어주고 완주한 사람들의 이름이 담긴 completion의 이름들을 HashMap에서 찾아서 제거해줌
단, 동명 이인이 있을 수 있어 HashMap의 value를 사람 수로 하고 제거할 때 사람 수가 1이면 remove하고 1 초과이면 사람 수를 줄이는 방법을 사용함

코드

import java.util.*;

//완주하지 못한 선수
class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
		
        Map<String, Integer> pMap = new HashMap<>();
        
        for(int i=0; i<participant.length; i++){
            if(pMap.containsKey(participant[i])){
                pMap.put(participant[i], pMap.get(participant[i]) + 1);
            }
            else{
                pMap.put(participant[i], 1);    
            }
        }
        
        // completion에 있는 경우 HashMap에서 제거
        for(int i=0; i<completion.length; i++){
            // 동명이인일 경우
            if(pMap.get(completion[i]) > 1){
                pMap.put(completion[i], pMap.get(completion[i])-1);
            }
            else{
                pMap.remove(completion[i]);
            }
        }
        
        // HashMap에 남아 있는 이름이 완주 못한 선수
        Set<String> keys = pMap.keySet();
        for(String key : keys){
            System.out.println(key);
            answer = key;
        }
		
        return answer;
    }
}

 

 

두번째 풀이

해결방안

먼저 completion의 배열을 hashmap에 넣어주고 participant배열의 값들을 빼주면서 -1이 됬거나 없는 이름을 answer에 담아줌

코드

import java.util.*;
// 완주하지 못한 선수
class Solution {
    // 참여한 선수 // 완주한 선수
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        Map<String, Integer> map = new HashMap<>();
        
        //완료한사람을 HashMap에 넣음 (value는 해당 이름을 가진 사람 수)
        for(int i=0; i<completion.length; i++){
            if(map.containsKey(completion[i])){
                map.put(completion[i], map.get(completion[i])+1);
            }
            else{
                map.put(completion[i], 1);
            }
        }
        
        // 사람을 찾았을 때 없거나 value=-1일때를 찾음
        for(int i=0; i<participant.length; i++){
            if(map.containsKey(participant[i])){
                map.put(participant[i], map.get(participant[i])-1);
                if(map.get(participant[i]) == -1){
                    answer = participant[i];
                    break;
                }
            }
            else{
                answer = participant[i];
                break;
            }
        }
               
        return answer;
    }
}