코딩테스트/프로그래머스

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

블로그 주인장 2023. 8. 11.

[ 목차 ]


    📢 문제 출처

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr


    📢 문제 설명

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

    📢 입출력 예시

    participant completion return
    ["leo", "kiki", "eden"] ["eden", "kiki"] "leo"
    ["marina", "josipa", "nikola", "vinko", "filipa"] ["josipa", "filipa", "marina", "nikola"] "vinko"
    ["mislav", "stanko", "mislav", "ana"] ["stanko", "ana", "mislav"] "mislav"
    • 입출력 예 #1
    • "leo"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
    • 입출력 예 #2
    • "vinko"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
    • 입출력 예 #3
    • "mislav"는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.

    📢 풀이

    📌 방법 01. keySet()

    import java.util.HashMap;
    
    class Solution {
        public String solution(String[] participant, String[] completion) {
            String answer = "";
            HashMap<String, Integer> hm = new HashMap<>();
            for (String p : participant) {
                hm.put(p, hm.getOrDefault(p, 0) + 1);
            }
            for (String s : completion) {
                hm.put(s, hm.get(s) - 1);
            }
    
            /* KeySet 사용 */
            for (String key : hm.keySet()) {
                if (hm.get(key) != 0){
                    answer = key;
                    break;
                }
            }
            
            return answer;
        }
    }

    📌 방법 02. entrySet()

    import java.util.HashMap;
    
    class Solution {
        public String solution(String[] participant, String[] completion) {
            String answer = "";
            HashMap<String, Integer> hm = new HashMap<>();
            for (String p : participant) {
                hm.put(p, hm.getOrDefault(p, 0) + 1);
            }
            for (String s : completion) {
                hm.put(s, hm.get(s) - 1);
            }
    
            /* EntrySet 사용 */
            for(Map.Entry<String, Integer>entry : hm.entrySet()){
                if(entry.getValue() != 0){
                    answer = entry.getKey();
                    break;
                }
            }       
            return answer;
        }
    }

    📌 방법 03. entrySet().iterator()

    • Iterator 인터페이스를 사용할 수 없는 컬렉션인 Map에서 Iterator 인터페이스를 사용하기 위해서는 Map에 entrySet(), keySet() 메소드를 사용하여 Set 객체를 반환받은 후 Iterator 인터페이스를 사용하시면 됩니다.
    import java.util.HashMap;
    
    class Solution {
        public String solution(String[] participant, String[] completion) {
            String answer = "";
            HashMap<String, Integer> hm = new HashMap<>();
            for (String p : participant) {
                hm.put(p, hm.getOrDefault(p, 0) + 1);
            }
            for (String s : completion) {
                hm.put(s, hm.get(s) - 1);
            }
    
            /*entrySet().iterator()*/
            Iterator<Map.Entry<String,Integer>> it = hm.entrySet().iterator();
            while(it.hasNext()){
                Map.Entry<String ,Integer> entry = (Map.Entry<String, Integer>) it.next();
    
                if(entry.getValue() != 0){
                    answer = entry.getKey();
                    break;
                }
            }
            return answer;
        }
    }

    📌 방법 04. keySet().iterator()

    import java.util.HashMap;
    
    class Solution {
        public String solution(String[] participant, String[] completion) {
            String answer = "";
            HashMap<String, Integer> hm = new HashMap<>();
            for (String p : participant) {
                hm.put(p, hm.getOrDefault(p, 0) + 1);
            }
            for (String s : completion) {
                hm.put(s, hm.get(s) - 1);
            }
    
            /*keySet().iterator()*/
            Iterator<String> it = hm.keySet().iterator();
            while(it.hasNext()){
                String key = it.next();
                Integer value = hm.get(key);
                if(value != 0){
                    answer = key;
                    break;
                }
            }
            
            return answer;
        }
    }

     

    반응형

    댓글