대진표가 있고, 0패와 1패를 한 사람을 분류하는 문제이다.
Example 1:
Input: matches = [[1,3],[2,3],[3,6],[5,6],[5,7],[4,5],[4,8],[4,9],[10,4],[10,9]]
Output: [[1,2,10],[4,5,7,8]]
Explanation:
Players 1, 2, and 10 have not lost any matches.
Players 4, 5, 7, and 8 each have lost one match.
Players 3, 6, and 9 each have lost two matches.
Thus, answer[0] = [1,2,10] and answer[1] = [4,5,7,8].
Example 2:
Input: matches = [[2,3],[1,3],[5,4],[6,4]]
Output: [[1,2,5,6],[]]
Explanation:
Players 1, 2, 5, and 6 have not lost any matches.
Players 3 and 4 each have lost two matches.
Thus, answer[0] = [1,2,5,6] and answer[1] = [].
많은 방법들을 생각했지만, 코딩테스트를 공부하면서 hashmap이 떠올랐다.
list에서는 append를 썼지만, hash는 get이다.
get을 통해서 hash를 채운다.
for winner, loser in matches:
losses_count[winner] = losses_count.get(winner, 0)
losses_count[loser] = losses_count.get(loser, 0) + 1
그 후 해시에 접근하면서,
0패이면 0패 list, 1패이면 1패 list에 값을 append한다.
그리고 0패 list, 1패 list 따로 따로 정렬하면, 문제 요구사항 끝.
class Solution:
def findWinners(self, matches: List[List[int]]) -> List[List[int]]:
answer = [[], []]
losses_count = {}
for winner, loser in matches:
losses_count[winner] = losses_count.get(winner, 0)
losses_count[loser] = losses_count.get(loser, 0) + 1
for player, count in losses_count.items():
if count == 0:
answer[0].append(player)
if count == 1:
answer[1].append(player)
for i in range(2):
answer[i].sort()
return answer
hashmap을 쓸지 알고있었지만, 바로바로 접근을 못했다.
이번 문제를 계기로 hash에 접근하는 방법에 익숙해지자.
[LeetCode][Python] 1207. Unique Number of Occurrences (0) | 2024.01.17 |
---|---|
[LeetCode][Python] 380. Insert Delete GetRandom O(1) (0) | 2024.01.17 |
[Programmers][Python] 프로세스 (1) | 2024.01.10 |
[LeetCode][Python] 1235. Maximum Profit in Job Scheduling (0) | 2024.01.06 |
[Programmers][Python] 캐시 (0) | 2024.01.05 |
댓글 영역