T_era

[JAVA] 해시 : 완주하지 못한 선수 본문

Programing/Programers

[JAVA] 해시 : 완주하지 못한 선수

블스뜸 2025. 4. 14. 13:31

문제 내용

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

해시 문제이기 때문에 키와 값을 이용한 문제풀이를 해보았다.
두 자료 participant와 completion을 이용해 값을 찾는 과정을 해보자

우선 아래 코드를 통해 participant의 데이터를 HashMap으로 만들었다

HashMap<String, Integer> hash = new HashMap<>();
for(String str : participant){
	hash.put(str, hash.getOrDefault(str, 0) + 1);
}

내가 푼 방법으로는 전체선수를 키값으로 하고 getOrDefalut를 통해 키가 처음 들어오면 0에서 시작하여
해당 키가 들어올 때마다 +1을 해주어 동명이인의 경우까지 고려했다

다시 아래 코드를 이용해 completion의 데이터를 키로 하여 해당 키의 값을 -1해주었다

for(String str : completion){
	hash.put(str, hash.get(str) - 1);
}


그렇게 HashMap안에는 완주한선수의 값은 0 완주하지 못한 선수의 값은 1이 남고
아래 코드를 통해 해당 선수의 키를 반환했다

for(Map.Entry<String, Integer> entry : hash.entrySet()){
	if(entry.getValue() > 0) answer = entry.getKey();
}


전체코드

import java.util.HashMap;
import java.util.Map;

public class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
	// participant(전체 선수를 HashMap에 값을 넣으며 value를 +1로 만들어준다.)
	// 동명이인의 경우를 해결하기 위한 방법
        HashMap<String, Integer> hash = new HashMap<>();
        for(String str : participant){
            hash.put(str, hash.getOrDefault(str, 0) + 1);
        }
        // completion(완주한 선수의 이름을 HashMap에서 찾아 value를 -1해준다
        for(String str : completion){
            hash.put(str, hash.get(str) - 1);
        }
        // value가 0이 아닌 키 값을 저장하고 반환한다
        for(Map.Entry<String, Integer> entry : hash.entrySet()){
            if(entry.getValue() > 0)
                answer = entry.getKey();
        }

        return answer;
    }
}

'Programing > Programers' 카테고리의 다른 글

[JAVA] 스택 : 같은 숫자는 싫어  (0) 2025.04.14
[JAVA] 해시 : 베스트앨범  (1) 2025.04.14
[JAVA] 해시 : 의상  (0) 2025.04.14
[JAVA] 해시 : 전화번호 목록  (0) 2025.04.14
[JAVA] 해시 : 포켓몬  (0) 2025.04.14