Problem From.
https://leetcode.com/problems/find-players-with-zero-or-one-losses/
오늘 문제는 승리와 패배한 사람이 담겨있는 배열이 주어졌을때, 그 배열을 보고 한번도 지지 않은 사람과 단 한번만 진 사람을 가진 리스트를 반환하는 문제였다.
문제는 간단하게 배열을 처음부터 끝까지 검사하면서 HashMap 을 써서,
승자가 들어오면 value 에 0 패배한 사람이 들어오면 value 를 가져와서 1을 누적해주는 방식으로 풀었다.
class Solution {
fun findWinners(matches: Array<IntArray>): List<List<Int>> {
val loseMap = HashMap<Int, Int>()
matches.forEach { match ->
loseMap.put(match[0], loseMap.getOrDefault(match[0], 0))
loseMap.put(match[1], loseMap.getOrDefault(match[1], 0) + 1)
}
val noLose = loseMap.filter { it.value == 0 }.map { it.key }
val oneLose = loseMap.filter { it.value == 1 }.map { it.key }
return listOf(noLose.toList().sorted(), oneLose.toList().sorted())
}
}
위 풀이의 시간복잡도는 O(n) 이 된다.