[JAVA] 완주하지 못한 선수

NoHae·2025년 1월 9일
0

문제 출처

코딩테스트 연습 > 해시 > 완주하지 못한 선수
https://school.programmers.co.kr/learn/courses/30/lessons/42576

문제 설명

참여자 배열 participant, 완주자 배열 completion이 주어진다. 완주하지 못 한 선수가 한 명 있다. 이 한명의 선수를 찾아서 결과로 return 하는 문제이다.

% 참가자 중에는 동명이인이 있음을 주의

접근 방법

HashMap을 통해 participant의 참가자를 key로 설정한다. 이 때, getOrDefault() 메서드를 통해 입력한다.(이미 등록된 선수들은 값이 지정되어 있기 때문에 +1을 하기 위해 사용)
이 후, completion 배열에 있는 선수들을 통해 HashMap을 재정비(completion에 이름이 있는 선수는 -1을 해서 등록되지 않은 선수를 찾기 위함)
map을 한 번 순회하면서 값이 0이 아닌 선수(key) 를 return한다.

import java.util.HashMap;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        
        HashMap<String,Integer> map = new HashMap<>();
        
        for (String s : participant){
            map.put(s, map.getOrDefault(s, 0) + 1);
        }
        
        for (String c : completion){
            map.put(c, map.get(c)-1);
        }
        
        for (String key : map.keySet()){
            if (map.get(key) != 0){
                return key;
            }
        }
        return answer;
    }
}

알게된 점

이미 맵에 등록 되어있을 때, getOrDefault(key,value) 메서드를 통해 확인하고, getOrDefault 메소드는 값이 없는 경우 지정한 value로 기본 값이 된다는 것을 알았다. 또한 이를 통해 해당 key의 value 값을 가져와 확인하고 변경 할 수 있음을 알 수 있었고, keySet() 메서드를 통해 key들의 모음을 확인 할 수 있음을 알았다.

문제푼 흔적

profile
노력 해보려고 하는 사람(00년생 소프트웨어융합학과, 24년 12월 부터 백엔드 및 코테 공부 시작)

0개의 댓글