완주하지 못한 선수

HeeSeong·2021년 1월 23일
0

프로그래머스

목록 보기
35/97
post-thumbnail

🔗 문제 링크

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


❔ 문제 설명


수많은 마라톤 선수들이 마라톤에 참여하였습니다.

단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.

마라톤에 참여한 선수들의 이름이 담긴 배열 participant와
완주한 선수들의 이름이 담긴 배열 completion이 주어질 때,
완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.


⚠️ 제한사항


  • 마라톤 참여 선수의 수는 1명 이상 100,000명 이하입니다.

  • completion의 길이는 participant의 길이보다 1 작습니다.

  • 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 참가자 중에는 동명이인이 있을 수 있습니다.



💡 풀이 (사용언어 : Java)


두 배열을 한번씩 돌면서 HashMap을 이용해서 풀었다. 참가자를 HashMap에 넣을 때, key는 이름, value는 사람 수로 해준다. 완주자들 이름으로 HashMap을 조회하면서 value가 2이상이면 -1해주고, 1이면 아예 삭제해준다. 조건상 HashMap에 key는 하나만 남게되고 이것을 반환하면 정답이다.

import java.util.HashMap;

public class Solution {
    public String solution(String[] participant, String[] completion) {
        HashMap<String, Integer> map = new HashMap<>();
        String answer = "";
        // 참가자들을 HashMap에 넣어준다. 같은 이름이면 value를 1씩 증가
        for (String name : participant) {
            if (map.containsKey(name))
                map.replace(name, map.get(name)+1);
            else
                map.put(name, 1);
        }
        // 완주자들을 조회, 같은 이름이 다수면 value를 -1씩 감소, 이름이 하나면 map에서 삭제
        for (String name : completion) {
            if (map.get(name) > 1)
                map.replace(name, map.get(name)-1);
            else
                map.remove(name);
        }
        // 반복문은 한번만 실행되고, HashMap에 유일하게 남은 key가 정답
        for (String key : map.keySet())
            answer = key;
        return answer;
    }
}
profile
끊임없이 성장하고 싶은 개발자

0개의 댓글