Programmers

Programmers LV.1 완주하지 못한 선수

Developer Garam.Choi 2020. 12. 16. 19:27

 

이번 코딩테스트를 공부하면서, 

 

차근차근 보자는 생각으로 진행하였다,

 

해당 문제는 Hash 를 가지고 해결하라는 문구가 써있었지만,

 

원래 하던 개발 방식적으로 우선적으로 접근해보기로 하였다. 

 

List<String>으로 constains를 이용하여 존재여부를 통하여 처리 할 수 있도록 진행하려 하였으나,

 

효율성 면에서 부족하단 평가를 받았다.

import java.util.*;
class Solution {
    public String solution(String[] participant, String[] completion) {
       String answer = "";
        List<String> completPeopleList = new ArrayList<String>();
        List<String> participantPeopleList = new ArrayList<String>();
        
        for(String completPeople : completion) {
            completPeopleList.add(completPeople);
        }

         for(String participantPeople : participant) {
            if(completPeopleList.contains(participantPeople)) {
                if(participantPeopleList.contains(participantPeople)){
                    answer = participantPeople;
                }else{
                    participantPeopleList.add(participantPeople);
                }
            }else{
                answer = participantPeople;
            }
        }
        
        return answer;
    }
}

 

 

위와 같이 코드 개발을 진행 한 후 

 

Hash 만을 사용하여 진행하기 위하여 자료구조 기초를 다시한번 흩은 뒤 확인하다보니

 

사내는 현재 JDK 1.7을 쓰고 있는데, JDK 1.8에 getOrDefault 가 존재하는것을 알았고, 조금 더 코드가 줄어 들어 분리해야할 내역이 주는것을 확인하였다, 

 

이를통하여 아래와 같이 간단하게 Hash를 사용하여 통과 완료 하였다.

 

 

participant가 여러명있을 경우, map에서 가져와 value + 1 을 진행함

 -> 같은 동명이인이 있을 경우 동명이인의 수만큼 value가 증가 

 

completion 리스트 인원에 participant 인원이 있을 경우, value -1 씩 차감

 

최종적으로 map key set으로 돌리면서 0이 아닌 인원이 통과 하지 못한것을 도출해낼 수 있음

import java.util.*;
class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        Map<String,Integer> completionPeopleList = new HashMap<String, Integer>();

        for(String participantPeople : participant) completionPeopleList.put(participantPeople ,completionPeopleList.getOrDefault(participantPeople,0) + 1);
        for(String completPeople : completion) completionPeopleList.put(completPeople ,completionPeopleList.get(completPeople) - 1);
            

        for(String key : completionPeopleList.keySet()){
            if(completionPeopleList.get(key) != 0) answer = key;
        }
           
        return answer;
    }
}