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

2024. 8. 16. 13:11·Algorithm/문제풀이

❒ Description


제목 완주하지 못한 선수
링크 https://school.programmers.co.kr/learn/courses/30/lessons/42576
자료구조 선형 (해시)
시간복잡도 O(n + k)


이번 문제는 해시맵을 사용하여 간단하게 해결 할 수 있는 문제인데 다른 풀이에서 
HashMap을 생성할 때 Stream을 이용한 풀이가 있어서 메모.

 

 

 

❒ Map 생성


Code 1

다음과 같은 배열 `"A", "B", "C", "A", "C", "A"`에서 각 요소가 몇 번 나왔는지를 Map 자료구조로 표현할 때

나는 주로 아래와 같이 코드를 작성했다.

Map<String, Integer> counter = new HashMap<>();
for (String name : students) {
	counter.put(name, counter.getOrDefault(name, 0) + 1);
}

  


 

Code 2

근데 이번 문제를 풀면서 다른 풀이에서 Stream API를 사용해서 코드를 작성한 사람을 봤다.

Map<String, Long> players = Arrays.stream(participant)
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

 


Code1과 2는 성능적으로 큰 차이는 없다. 하지만 가독성 면에서는 2가 더 좋은거 같다.

하지만 호환성면에서 본다면 Code2는 Java 8 미만에서 사용할 수 없다.

상황에 맞게 잘 선택해서 쓰면될 듯 싶다. 

 

 

❒ Iterator 사용


for (String c : completions) {
    int left = players.get(c);
    if (left == 1) {
        players.remove(c);	
    } else {
        players.put(c, players.get(c) - 1);
    }
}

return players.entrySet().iterator().next().getKey();

동명이인이 없는 경우는 아예 map에서 키를 삭제해버리는 방식이다.

이렇게 되면 결국 map에는 하나의 key만 남기때문에 Iterator를 사용해서 key를 리턴하면 된다. 

 

 

 

❒ Solution


Code 1

class Solution {
    public String solution(String[] participant, String[] completion) {
        // 1. create counter Map
        Map<String, Integer> players = new HashMap<>();
        for (String player : participant) {
            players.put(player, players.getOrDefault(player, 0) + 1);
        }

        // 2. for loop completion
        for (String completer : completion) {
            if (players.containsKey(completer)) {
                players.put(completer, players.get(completer) - 1);
            }
        }

        // 3. for loop map.keyset
        String answer = "";
        for (String player : players.keySet()) {
            if (players.get(player) > 0) {
                answer = player;
            }
        }
        return answer;
    }
}

 

 

Code2

class Solution {
    public String solution(String[] participant, String[] completion) {
    	Map<String, Long> players = Array.stream(participant)
        	.collect(Collectors.groupingBy(Fuction.identity(), Collectors.counting()));
            
        for (String c : completion) {
        	if (players.get(c) == 1) {
            	players.remove(c);
            } else {
            	players.put(c, players.get(c) - 1);
            }
        }
        
        return players.entrySet().iterator().next().getKey();
    }
}

'Algorithm > 문제풀이' 카테고리의 다른 글

[LeetCode#207] Course Schedule  (0) 2024.08.30
[LeetCode#46] Permutation  (0) 2024.08.21
[LeetCode#973] K Closest Points to Origin  (0) 2024.08.08
[LeetCode#23] Merge K sorted Lists  (0) 2024.08.06
[LeetCode#641] Design Circular Deque  (0) 2024.08.05
'Algorithm/문제풀이' 카테고리의 다른 글
  • [LeetCode#207] Course Schedule
  • [LeetCode#46] Permutation
  • [LeetCode#973] K Closest Points to Origin
  • [LeetCode#23] Merge K sorted Lists
gilbert9172
gilbert9172
gilbert9172 님의 블로그 입니다.
  • gilbert9172
    バックエンド
    gilbert9172
  • 전체
    오늘
    어제
    • All Categories (166)
      • 우테코 7기 (21)
        • 1주차 (8)
        • 2주차 (5)
        • 3주차 (6)
      • Langauge (4)
        • Java (3)
        • Kotlin (1)
      • Back-End (13)
        • SpringBoot (1)
        • Trouble Shooting (0)
        • Setup & Configuration (1)
        • SQL (3)
        • Redis (8)
      • Architecture (6)
        • Multi Module (1)
        • DDD (5)
      • CS (30)
        • Data Structure (6)
        • Operating System (0)
        • Network (12)
        • Database (10)
        • Design Pattern (2)
      • Algorithm (78)
        • 내용 정리 (18)
        • 문제풀이 (60)
      • DevOps (6)
        • AWS (5)
        • Git (1)
      • Front-End (1)
        • Trouble Shooting (1)
      • Project (6)
        • 페이스콕 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    오블완
    greedy
    Two-Pointer
    sliding-window
    부분단조성
    Back-Tracking
    binarysearch
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
gilbert9172
[프로그래머스#42576] 완주하지 못한 선수
상단으로

티스토리툴바