99클럽 코테 스터디 28일자 TIL + group-the-people-given-the-group-size-they-belong-to

이월(0216tw)·2024년 6월 16일
0

99클럽/알고리즘풀이

목록 보기
27/38

문제 출처

https://leetcode.com/problems/group-the-people-given-the-group-size-they-belong-to/(leetcode)

학습 키워드

배열

시도 방법

  1. 배열의 값을 기준으로 해시맵을 이용한다.
  2. 만약 해시맵에 해당 키가 있으면 값인 ArrayList에 추가를 하는데
  3. 만약 현재 ArrayList의 사이즈가 다 찼다면 answer에 추가하고 해당 키에 새로운 ArrayList할당

내가 작성한 코드

class Solution {
    public List<List<Integer>> groupThePeople(int[] groupSizes) {
        
        List<List<Integer>> answer = new ArrayList<>(); 
        HashMap<Integer , ArrayList<Integer>> map = new HashMap<>(); 

        for(int i = 0 ; i<groupSizes.length; i++) {
            
            if(map.get(groupSizes[i]) == null) {
                map.put( groupSizes[i], new ArrayList<>());
            } else {               
                if(map.get(groupSizes[i]).size() == groupSizes[i]) {
                    answer.add( (map.get(groupSizes[i]))) ; 
                    map.put(groupSizes[i] , new ArrayList<>() );           
                } 
            }

            map.get(groupSizes[i]).add(i); 
        }
        
        for(Integer key : map.keySet()) {
            answer.add(map.get(key)); 
        }
        
        return answer ; 
    }
}

코드설명 ( 예시 데이터 groupSizes = [3,3,3,3,3,1,3] )

  1. groupSizes[0] = 3 일때
    map.get(3) 은 비어있으므로 새롭게 생성한다. map.put(3 , new ArrayList<>());
    그리고 해당 ArrayList에 인덱스를 추가한다.

    map : {3, [0]} 
  2. groupSizes[1] = 3 일때
    map.get(3)은 현재 존재한다. map.get(3) 의 size는 현재 1이므로 공간도 남는다.
    따라서 map.get(3).add(1) 처리를 한다.

     map : {3, [0,1]} 
  3. groupSizes[2] = 3 일때
    map.get(3)은 현재 존재한다. map.get(3) 의 size는 현재 2이므로 공간도 남는다.
    따라서 map.get(3).add(2) 처리를 한다.

    map : {3 , [0,1,2]} 
  4. groupSizes[3] = 3 일때
    map.get(3)은 현재 존재한다. 하지만 size가 이미 3 == 3 이므로 현재 값은 answer에 추가하고 새로운 배열을 할당하고 해당 인덱스를 추가한다.

    answer = [ [0,1,2] ] 
    map : {3 , [3]}
  5. groupSizes[4] = 3 일때
    map.get(3)은 현재 존재한다. map.get(3) 의 size는 현재 1이므로 공간도 남는다.
    따라서 map.get(3).add(4) 처리를 한다.

    answer = [ [0,1,2] ] 
    map : {3 , [3,4]} 
  6. groupSizes[5] = 1 일때
    map.get(1)은 비어있으므로 새롭게 생성한다. map.put(1 , new ArrayList<>());
    그리고 해당 ArrayList에 인덱스를 추가한다.

    answer = [ [0,1,2] ] 
    map : { 3 : [3,4] , 1 : [5] } 
  7. groupSizes[6] = 3 일때
    map.get(3)은 현재 존재한다. map.get(3) 의 size는 현재 2이므로 공간도 남는다.
    따라서 map.get(3).add(6) 처리를 한다.

    answer = [ [0,1,2] ] 
    map : { 3 : [3,4,6] , 1 : [5] } 

마지막으로 반복문이 종료된 후에는
해당 map에 들어있는 모든 값들을 answer에 추가하면 된다.

answer = [ [0,1,2] , [3,4,6] , [5] ] 

출력결과


새롭게 알게된 점

없음

다음에 풀어볼 문제 - iterator-for-combination



#99클럽 #코딩테스트 준비 #개발자 취업 #항해99 #TIL

profile
Backend Developer (Financial)

0개의 댓글