본문 바로가기
leetcode - contest

weekly-contest-323

by skyepodium 2022. 12. 11.

개요

날짜 2022.12.11 일 11:30 ~ 13:00

링크: https://leetcode.com/contest/weekly-contest-323/

결과 3 / 4

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