ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Programmers / level1] 완주하지 못한 선수
    Programmers/코딩테스트 풀이 2021. 12. 7. 23:12

     

    프로그래머스 / level1  / Java  / 완주하지 못한 선수

     

    문제
    많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
    마라톤에 참여한 선수들의 이름이 담긴 배열 participant완주한 선수들의 이름이 담긴 배열 completion이 주어질 때,
    완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

        * 참가자 중에는 동명이인이 있을 수 있습니다.
    package TestSolution;
    
    import java.util.HashMap;
    
    public class maratonSolution {
    
        private static String[] participants = {"leo", "kiki", "eden"};
        private static String[] completions= {"eden", "kiki"};
    
        public static void main(String[] args){
            System.out.println(solution(participants, completions));
        }
    
        public static String solution(String[] participants, String[] completions){
            String answer = "";
    
            // 1. HashMap 생성
            HashMap<String, Integer> map= new HashMap<>();
    
            // 2. map에 참가자 모두 PUT 하기
            for(String participant : participants){
                map.put(participant, map.get(participant) == null ? 0 : map.get(participant) +1 );
                // map의 Key 값으로 해당 참가자의 이름을 넣고, 
                // Value로는 삼항 연산자를 이용, 동명이인이 없을 시 0 입력 / 있을 시 + 1 입력
                // 삼항연산자와 map의 함수인 map.getOrDefault()는 같은 역할을 할 수 있다.
            }
    
            // 3. map의 모든 참가자 중 완주자를 제거하기
            for(String completion : completions){
           		
                // map에 완주자의 Key값이 있고, 동명이인이 없을 경우 완주자의 Key값(이름) 제거
                if(map.get(completion) != null && map.get(completion) == 0){     
                    map.remove(completion);
                
                //  동명이인이 있을 경우 완주자의 Key값에 연결 된 Value 값에 -1 처리
                } else if(map.get(completion) != null && map.get(completion) > 0) {
                    map.put(completion, map.get(completion) - 1);   
                }
            }
    
            answer += map.keySet();
            
            /*
            *   map.keySet() : map에 저장 된 Key 값을 모두 불러온다
            *   map.entrySet() : map에 저장 된 Key 값과 Value 값을 모두 불러온다
            * */
    
            return answer;
        }
    
    }

     

    * 오늘의 공부 내용

     

    □ ArrayList와 Map의 차이점 

    ArrayList Map
    순서를 유지하고 저장 키와 값의 쌍으로 저장(키와 값은 모두 객체)
    중복 저장 가능 중복 저장 불가(키 값이 같을 경우 덮어쓰기)
    인덱스로 관리  

     

    □ Map의 주요 메소드 

    기능 메소드 설명
    객체추가 put(Key, Value) 맵에 키와 값을 추가
    객체검색 containsKey(Key) 해당 키가 있는지 확인하여 결과 리턴
    containsValue(Value) 해당 값이 있는지 확인하여 결과 리턴
    entrySet() 키와 값으로 이루어진 Map의 모든 객체를 리턴
    get(Key) 해당 키의 값 리턴
    isEmpty() Map이 비어있는 지 여부 리턴
    keySet() Map의 모든 키를 리턴
    size() Map에 저장 된 모든 키의 개수 리턴
    values() Map에 저장 된 모든 값 리턴
    getOrDefault(Key, DefaultValue) Map에 해당 키에 값이 있으면 저장 된 값 리턴
    값이 없는 경우에는 DefaultValue를 리턴
    객체삭제 clear() Map 초기화
    remove(Key) 해당 키 객체 삭제 

     

Designed by Tistory.