ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Programmers LV.1 완주하지 못한 선수
    Programmers 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;
        }
    }

     

     

    'Programmers' 카테고리의 다른 글

    Programmers LV.2 다리를 지나가는 트럭  (0) 2020.12.23
    Programmers LV.2 주식가격  (0) 2020.12.20
    Programmers LV.3 베스트앨범  (0) 2020.12.19
    Programmers LV.2 위장  (0) 2020.12.17
    Programmers LV.2 전화번호 목록  (0) 2020.12.16

    댓글

Designed by black7375.