개요
1. Delete Greatest Value in Each Row
링크: https://leetcode.com/contest/weekly-contest-323/problems/delete-greatest-value-in-each-row/
반복문 사용
class Solution:
def deleteGreatestValue(self, grid: List[List[int]]) -> int:
# 1. init
n = len(grid)
m = len(grid[0])
res = 0
# 2. sort
for i in range(n):
grid[i].sort(reverse=True)
# 2. find max
max_val = 0
for j in range(m):
max_val = 0
for i in range(n):
max_val = max(max_val, grid[i][j])
res += max_val
return res
2. Divide Players Into Teams of Equal Skill
링크: https://leetcode.com/contest/weekly-contest-323/problems/longest-square-streak-in-an-array/
반목분 + 해시 - 이게 더 쉬웠습니다.
class Solution:
def longestSquareStreak(self, nums: List[int]) -> int:
# 1. init
res = 0
n = len(nums)
d = [1] * (n+1)
di = {}
# 2. sort
nums.sort()
# 3. loop
for idx, num in enumerate(nums):
di[num] = idx
# 4. check
for idx, num in enumerate(nums):
sq = num * num
if sq in di:
d[di[sq]] = d[idx] + 1
res = max(d)
return res if res > 1 else -1
3. Design Memory Allocator
링크: https://leetcode.com/contest/weekly-contest-323/problems/design-memory-allocator/
class Allocator:
memory = []
top = 0
size = 0
def __init__(self, n: int):
self.size = n
self.memory = [0] * n
self.top = 0
def allocate(self, size: int, mID: int) -> int:
max_cnt = 0
cnt = 0
start_idx = 0
for i in range(self.size):
if self.memory[i] == 0:
cnt += 1
if cnt > max_cnt:
max_cnt = cnt
start_idx = i - cnt + 1
if cnt >= size:
break
if self.memory[i] != 0:
cnt = 0
if max_cnt < size:
return -1
for i in range(start_idx, start_idx + size):
self.memory[i] = mID
return start_idx
def free(self, mID: int) -> int:
res = 0
for i in range(self.size):
if self.memory[i] == mID:
res += 1
self.memory[i] = 0
return res
4. Divide Nodes Into the Maximum Number of Groups
링크: https://leetcode.com/contest/weekly-contest-323/problems/maximum-number-of-points-from-grid-queries/
쿼리 문제..못품, Discussion 보니까 flood fill 이라고하는데 다시 봐야겠다.
'leetcode - contest' 카테고리의 다른 글
weekly-contest-322 (0) | 2022.12.04 |
---|---|
weekly-contest-321 (0) | 2022.12.04 |