ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] 완주하지 못한 선수 (JAVA)
    알고리즘 2020. 9. 10. 22:30
    반응형

     

    Hash를 이용한 나의 풀이

    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.Map;
    
    import static java.util.stream.Collectors.counting;
    import static java.util.stream.Collectors.groupingBy;
    
    class Solution {
        public String solution(String[] participant, String[] completion) {
            Map<String, Long> pMaps = Arrays.stream(participant).collect(groupingBy(String::toLowerCase, counting()));
    
            for (String c : completion)
                pMaps.replace(c, pMaps.get(c) - 1);
    
            for (Map.Entry<String, Long> entry : pMaps.entrySet())
                if (entry.getValue() == 1) return entry.getKey();
    
            return null;
        }
    }

     

    Stream을 잘 사용하지 못하지만 알고리즘 문제를 풀면서 조금씩 연습하고 있습니다.

     

    예제 #1 기준으로 설명합니다.

     

    Map<String, Long> pMaps = Arrays.stream(participant).collect(groupingBy(String::toLowerCase, counting()));

    participant 배열의 Stream을 생성 후 String의 toLowerCase를 기준으로 카운팅하여 Map을 생성합니다.

    pMaps = {eden=1, leo=1, kiki=1}

     

    for (String c : completion)
        pMaps.replace(c, pMaps.get(c) - 1);

    completion 배열을 순서대로 돌면서 pMaps의 Key와 일치하면 -1 카운팅 합니다.

    pMaps = {eden=0, leo=1, kiki=0}

     

    for (Map.Entry<String, Long> entry : pMaps.entrySet())
        if (entry.getValue() == 1) return entry.getKey();

    pMaps에 value가 1인 key 값은 완주하지 못했으므로 key값을 반환하고 종료합니다.

    반응형

    '알고리즘' 카테고리의 다른 글

    [알고리즘] 병합 정렬  (0) 2020.06.27
Designed by Tistory.