본문 바로가기

Problem Solving/[Java] Programmers

[Java] 프로그래머스: 완주하지 못한 선수

문제 이해

  • 마라톤 선수들이 단 한명의 선수를 제외하고는 모두 마라톤을 완주했다.
  • 완주하지 못한 선수의 이름을 return하라.

 

<조건>

  • 알 수 없음

 

<입력>

  • participant: 마라톤에 참여한 선수들의 이름이 담긴 배열 (1 ~ 100,000, 10^5)
  • completion: 마라톤에 완주한 선수들의 이름이 담긴 배열 (1 ~ 100,000, 10^5)
  • ※ 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 구성
  • ※ 동명이인이 있을 수 있음.

 

<출력>

  • 완주하지 못한 선수의 이름을 return하라.

 

 


문제 풀이

동명이인이 없었다면 단순히 Set으로 해결할 수 있겠지만,

동명이인이 존재하기에 '각 이름마다 몇 명 있는지' 체크를 해줄 필요가 있습니다.

그렇기에 HashMap을 써서 문제를 해결했습니다.

 

 


전체 코드

import java.util.*;

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

 

 


배운 점

map에 처음 값을 넣으며, 중복한 key가 들어올 때는

map.put(key, map.getOrDefault(key, 0) + 수정할 값);

 

 

map의 값을 수정하고 싶을 때는

map.put(key, map.get(key) + 수정할 값);

 

 

이 두 방법을 잘 기억하자!