-
[프로그래머스] 완주하지 못한 선수 (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