https://leetcode.com/problems/group-the-people-given-the-group-size-they-belong-to/(leetcode)
배열
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[0] = 3 일때
map.get(3) 은 비어있으므로 새롭게 생성한다. map.put(3 , new ArrayList<>());
그리고 해당 ArrayList에 인덱스를 추가한다.
map : {3, [0]}
groupSizes[1] = 3 일때
map.get(3)은 현재 존재한다. map.get(3) 의 size는 현재 1이므로 공간도 남는다.
따라서 map.get(3).add(1) 처리를 한다.
map : {3, [0,1]}
groupSizes[2] = 3 일때
map.get(3)은 현재 존재한다. map.get(3) 의 size는 현재 2이므로 공간도 남는다.
따라서 map.get(3).add(2) 처리를 한다.
map : {3 , [0,1,2]}
groupSizes[3] = 3 일때
map.get(3)은 현재 존재한다. 하지만 size가 이미 3 == 3 이므로 현재 값은 answer에 추가하고 새로운 배열을 할당하고 해당 인덱스를 추가한다.
answer = [ [0,1,2] ]
map : {3 , [3]}
groupSizes[4] = 3 일때
map.get(3)은 현재 존재한다. map.get(3) 의 size는 현재 1이므로 공간도 남는다.
따라서 map.get(3).add(4) 처리를 한다.
answer = [ [0,1,2] ]
map : {3 , [3,4]}
groupSizes[5] = 1 일때
map.get(1)은 비어있으므로 새롭게 생성한다. map.put(1 , new ArrayList<>());
그리고 해당 ArrayList에 인덱스를 추가한다.
answer = [ [0,1,2] ]
map : { 3 : [3,4] , 1 : [5] }
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] ]
없음
#99클럽 #코딩테스트 준비 #개발자 취업 #항해99 #TIL