[코딩테스트] 프로그래머스 Lv.1 완주하지 못한 선수

C_Mungi·2024년 4월 13일

코딩테스트

목록 보기
3/4

문제



풀이 과정


  • 참가 선수가 완주자 명단에 있는지 확인해야하므로 HashSet과 HashMap을 고려
    • HashSet의 경우 참가 선수를 Value로 담으면 되지만 제한사항의 참가자 중에는 동명이인이 있을 수 있습니다.라고 명시되어 있기에 HashSet으로 한다면 동명이인에 대한 체크가 불가능
    • HashMap의 경우 참가 선수를 Key로 담고 제한사항의 참가자 중에는 동명이인이 있을 수 있습니다.를 고려해 Value에 인원 수를 카운트한 정수를 담으면 동명이인에 대한 체크가 가능
  • 완주자 명단의 선수를 Key로 HashMap의 값을 추출해 1씩 빼기
  • HashMap에서 Value가 0이 아닌 선수가 완주하지 못한 선수로 판단해 반환.

작성 코드


import java.util.*;
class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        HashMap<String, Integer> playerMap = new HashMap<>();
        for(String player : participant){
        	// 동명이인이 없는 경우 디폴드 값(0) + 1
            // 동명이인이 있는 경우 저장된 값 + 1
            playerMap.put(player, playerMap.getOrDefault(player, 0)+1);
        }
        
        for(String player : completion){
        	// 완료된 선수가 있는 경우 저장된 값 -1
            playerMap.put(player, playerMap.get(player)-1);
        }
        
        return playerMap.entrySet()
            .stream()
            .filter(entry -> entry.getValue() != 0)
            .findFirst()
            .orElseThrow()
            .getKey();
    }
}

실행 결과


profile
백엔드 개발자의 수집상자

0개의 댓글