프로그래머스 42576번: 완주하지 못한 선수(Java, 해시)

HamJina·2025년 10월 8일

프로그래머스

목록 보기
1/1
post-thumbnail

☑️ 문제

https://school.programmers.co.kr/learn/courses/30/lessons/42576

✔️관련 알고리즘 개념

해시

☑️ 문제 분석

  • 해당 문제는 HashMap의 key와 value쌍을 이용하여 문제를 해결하는 것이다. 여기서 중요한 것은 예제 3과 같이

    "mislav"는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.

    동명이인이 있는 경우를 처리하는 것이다.
  • 예제 3에 대해 분석해보자
    • completion 정보를 hashMap에 저장해둔다.
    • 이후 participant를 반복문으로 돌면서 hashMap에 저장된 참가자 정보가 없다면 해당 참가자가 완주하지 못한 것으로 판단하여 해당 참가자의 이름을 반환한다.
    1. completion 정보 저장

      1. stanko 삽입 (여기서 value값은 key에 해당하는 이름을 가진 사람수이다.)

        keyvalue
        stanko1
      2. ana 삽입

        keyvalue
        stanko1
        ana1
      3. mislav 삽입 .

        keyvalue
        stanko1
        ana1
        mislav1
    2. participant 정보다 hashMap에 포함된건지 확인

      keyvalue
      stanko1
      ana1
      mislav1
      1. mislav 확인
        1. 현재 hashMap에는 mislav가 존재한다. 해당 참가자를 확인했으므로 hashMap에서 지워준다.

          keyvalue
          stanko1
          ana1
      2. stanko확인
        1. 현재 hashMap에는 stanko가 존재한다. 해당 참가자를 확인했으므로 hashMap에서 지워준다.

          keyvalue
          ana1
      3. mislav 확인
        1. 현재 hashMap에는 mislav이 존재하지 않는다. 즉 완주자 명단에 존재하지 않는 것이므로 해당 참가자의 이름을 반환한다.

☑️ 코드

import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;

class Solution {
    public String solution(String[] participant, String[] completion) {
        HashMap<String, Integer> map = new HashMap<>();
        for (String s : completion) {
            if(map.containsKey(s)) {
                Integer value = map.get(s);
                map.put(s, value+1);
            }else {
                map.put(s, 1);
            }
        }

        String answer = "";
        for (String s : participant) {
            if(map.containsKey(s)) {
                Integer value = map.get(s);
                if(value.equals(1)) map.remove(s);
                else map.put(s, value-1);
            } else {
                answer = s;
                break;
            }
        }

        return answer;
    }

    public static void main(String[] args) {
        String[] participant = {"mislav", "stanko", "mislav", "ana"};
        String[] completion = {"stanko", "ana", "mislav"};
        System.out.println(new Solution().solution(participant, completion));
    }
}

☑️ 채점 결과 : 맞음

☑️ 어려웠던 점

  • 동명이인을 처리하기 위한 로직이 어려웠다.

0개의 댓글