코딩 테스트 대비

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

nippycloud 2025. 11. 4. 12:39

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

 

HashMap을 사용하면 효율적인 코드를 만들 수 있다.

 

Sudo Code

1. HashMap 선언 - key : 참가자 이름, Value : 동명이인의 수

2. 참가자들을 HashMap에 넣고, 동명이인일 경우 HashMap의 value를 ++한다.

3. HashMap에서 완주자 수를 차감한다.

4. HashMap에서 value가 0이 아닌 key를 찾아 리턴한다.

 

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        Map<String, Integer> map = new HashMap<>();
        for(String s : participant){
            map.put(s, map.getOrDefault(s, 0) +1);
        }

        for(String s : completion){
            map.put(s, map.get(s)-1);
        }

        for(String s : map.keySet()){
            if(map.get(s)!=0) answer = s;
        }

        return answer;
    }
}

 

map.put(s, map.getOrDefault(s, 0) +1);

- key는 참여자 s

- value는

만약 s가 이미 map에 있다면 해당 s에 매핑되는 value+1

만약 s가 map에 존재하지 않는다면 default값 0 + 1

 

map.put(s, map.get(s)-1);

- key는 완주자 s

- value는 map에 존재하는 참여자들의 수

완주자들이 map에 들어올 때마다 해당 key에 매핑되는 value를 --;

 

map.keySet();

- keySet은 map의 key들을 Set 형태로 반환한다.

- map의 key들에 매핑되는 value가 0이 아니라면 (완주를 하지 못했다면) 해당 key를 리턴

 

* Map의 key는 중복 값을 넣어도 중복되지 않는다.

* map.get(key값) : value 리턴

* map.getOrDefault(key값, 기본값) : key값에 매핑되는 value가 있다면 해당 value 리턴, 없다면 기본값 리턴

* map.keySet() : map의 key들을 Set으로 리턴, 이것을 이용해 for each문으로 value들을 각각 구할 수 있다.