Home 프로그래머스(완주하지 못한 선수)
Post
Cancel

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

첫 시도

  • participant 배열에 있는 선수들의 이름을 key로 하여 map을 만든다
  • 동명이인이 있을 수 있으므로 value는 Integer로 하여 해당 이름을 가진 선수의 수를 나타내도록 한다
  • completion 배열의 선수 이름들을 key로 하여 value를 가져와 1을 뺀다.
  • map을 순회하면서 0보다 큰 value를 가지고 있는 선수가 발견되면 그 선수의 이름을 출력하고 종료한다.
  • 시간 복잡도는 O(3*10^5-1)이다 -> 선수 이름 수만큼 map 만들기 + 도착한 선수 이름만큼 map의 value -1하기 + value가 0이 아닌 선수 이름 찾기

해결

  • 내용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.*;
class Solution {

    public String solution(String[] participant, String[] completion) {
        String answer ="";
        HashMap<String, Integer> hm = new HashMap<>();
        for(String player : participant) hm.put(player, hm.getOrDefault(player, 0) + 1);
        for(String player : completion) hm.put(player, hm.get(player) -1);
        for(String key : hm.keySet()) {
            if(hm.get(key) != 0) {
                answer = key;
                System.out.println(answer);
                break;
            }
        }
        return answer;
    }
}

참고

This post is licensed under CC BY 4.0 by the author.