잡다로그

[99클럽 코테 스터디] 17일차 TIL - 배열, Group the People Given the Group Size They Belong To 본문

Algorithm

[99클럽 코테 스터디] 17일차 TIL - 배열, Group the People Given the Group Size They Belong To

날으는다람쥐 2024. 6. 17. 00:36

[17일차 미들러] 배열

문제: https://leetcode.com/problems/group-the-people-given-the-group-size-they-belong-to/description/

* 대충 번역: n명의 사람이 몇 개의 그룹으로 나뉘어져있다. 각 사람은 0부터 n-1까지의 고유한 ID를 가지고 있다. 정수 배열 groupSizes가 주어지고, groupSizes[i] 는 사람 i가 있는 그룹의 크기를 나타낸다. 예를 들어, groupSizes[1] = 3 이면, 사람1은 크기가 3인 그룹에 있다. 

모든 사람이 그룹에 속하게끔 그룹들을 반환하. 각 사람 i는 groupSizes[i] 크기의 그룹에 있어야 한다.

각 사람은 정확히 하나의 그룹에만 있고, 모든 사람은 반드시 그룹에 속해있다. 만약 여러 답이 있다면, 아무 것이나 반환하라. 주어진 입력값에 대해 적어도 하나의 유효한 정답이 주어진다.

Solution

문제에서 주어진 배열을, 정답 배열과 비슷한 형태로 모은 뒤 슬라이싱 해주었다.

from collections import defaultdict

class Solution(object):
    def groupThePeople(self, groupSizes):
        """
        :type groupSizes: List[int]
        :rtype: List[List[int]]
        """
        group = defaultdict(list)
        answer = []

        # group = {2: [2, 4, 5, 6], 4: [1, 3, 7, 8]}일 때,
        # answer = [[2, 4], [5, 6], [1, 3, 7, 8]]
        # group[i] = 크기가 i인 배열에 속하는 사람 번호
        for i in range(len(groupSizes)):
            size = groupSizes[i]
            group[size].append(i)

        # group 값들 슬라이싱
        for size, ppl in group.items():
            if len(ppl) > size:
                k = 0
                while k < len(ppl):
                    answer.append(ppl[k:k+size])
                    k += size
            else:
                answer.append(group[size])

        return answer

group 사전형 변수는 결국 key가 사이즈, value가 속하는 사람들의 번호 배열을 나타내게 된다. 

group의 key값이 그룹의 크기가 되므로, 0부터 size까지, size+1부터 size+size 까지 .... 배열(그룹)을 만들게 된다.

나다어

  • 사전형 변수를 순회할 때는 for key, value in dict.items(): 로 해주어야 한다.
Comments