LeetCode -2225. Find Players With Zero or One Losses
개요
player
들이 대결을 한 결과정보인 matches
가 주어진다.
matches
는 [승자
, 패자
]로 구성되어있는 List형 자료다.
player
들은 1보다 큰 숫자로 구분된다.(1,2,3,4 ....) 범위는 0 < player
<= 100000
목표
matches
가 주어졌을 때, findWinners
함수를 작성하여 answers
를 반환해야 한다.
answers
는 List로 구성되어 있으며, 구성요소는 아래와 같다.
각 answer의 자료는 오름차순으로 정렬되어야 한다.
출력 예
matches : [[1,3],[2,3],[3,6],[5,6],[5,7],[4,5],[4,8],[4,9],[10,4],[10,9]]
answers : [[1,2,10],[4,5,7,8]]
설명 answers[0]:
1은 3에게만 승리하였고, 한번도 진적이 없음. 2는 3에게만 승리하였고, 한번도 진적이 없음. 10은 4에게만 승리하였고, 한번도 진적이 없음.
answers[1]:
4는 5, 8, 9에게 승리하였고 10에게 1패 하였음 5는 6, 7에게 승리하였고, 4에게 1패하였음 7은 한 번도 이긴적이 없고, 5에게 1패하였음 8은 한 번도 이긴적이 없고, 4에게 1패하였음
해결 전략
문제는 0패와 1패한 player를 식별해야 한다.
얼마나 승리를 하였는지는 중요하지 않다고 분석된다.
다만 matches
에서 총 몇 명의 player
가 게임에 참여하였는지 식별해야 한다.
추가로, answers[0]과 answers[1]은 오름차순으로 정렬되어 있어야 한다.
1. dictionary(map)를 이용한 hash map 사용
- key: value 형태로 저장할 수 있는 dictionary(map)을 이용해 matches 안에 참여한 player와 진 횟수를 저장한다.
- 패배 횟수에 따라 오름차순으로 나눠 return한다.
2. List를 이용한 hashtable 사용
List는 순서가 정해저 있는 자료구조이다. 또한, player를 구분하는 자료가 정수이기 때문에 길이가 최대 플레이어 수
의 hashtable을 생성한다면 player가 hashtable[player 번호
]로 접근했을 때, 바로 접근할 수 있기 때문에 O(1)이 된다.
최대 플레이어 수
길이의 hashtable을 생성한다.
- 패배 횟수에 따라 return 한다.
# sort할 필요 없이, player 1부터, MAX_PLAYERS까지 조회하면 된다.
answer = [find_losses(hashtable,lose=0), find_losses(hashtable,lose=1)]
회고
hashtable을 사용할 때, dictionary 형태의 자료를 먼저 떠올리곤 했는데
key 값이 integer일 경우엔, 미리 오름차순으로 정렬할 수 있다는 특징을 이용할 수 있음을 알게 되었다.