코딩테스트/leetcode

99클럽 코테 스터디 26일차 TIL, 배열(Group the People Given the Group Size They Belong To)

feel2 2024. 6. 16. 17:17

1. 문제 정의

2. 문제 접근

배열을 이용하라고 했지만 나는 map을 이용하여 풀었다.

3. 문제 풀이

  1. Map을 정의한다.
  2. groupSize의 값을 키로 하여, map에 index값을 추가한다.
  3. map의 크기가 groupSize가 되면 ans list 에 추가하고, map을 clear한다.

4. 코드

class Solution {
    public List<List<Integer>> groupThePeople(int[] groupSizes) {
        List<List<Integer>> ans = new ArrayList<>();
        Map<Integer, List<Integer>> map = new HashMap<>();
        int l = groupSizes.length;

        for(int i = 0; i < groupSizes.length; i++) {
            int size = groupSizes[i];
            map.putIfAbsent(size, new ArrayList<>());
            map.get(size).add(i);

            if(map.get(size).size() == size){
                ans.add(new ArrayList<>(map.get(size)));
                map.get(size).clear();
            }
        }

        return ans;
        
    }
}

 

 

5. 회고

처음에 문제를 잘 이해하지 못해서 이해하는데 시간이 좀 걸렸다. 문제를 이해하고 나서 든 생각이 Queue아니면 Map을 활용해야겠다라고 생각이 들었다. 사실 Queue를 활용하든 , Map을 활용하든 정해진 크기만큼 가지고 있다가 비우는것은 같지만 groupSize정보를 같이 들고 있어야 하기 때문에 Map이 더 적합하다고 생각이 들었다. 배열로도 풀 수 있을 것 같은데 잘 생각이 나지 않는다....