[코딩테스트]list 묶기(queue)

건너별·2022년 4월 23일
0

algorithm

목록 보기
24/27

list 묶기 문제

  • nested list 형태에서 max_group만큼 묶어서 list로(flatten) 반환하되, 묶은 list가 max_len를 초과할경우 초과하지 않을 때 까지 group을 줄여서 묶음.
  • 묶인 list는 다시 활용되지 않음. 다음으로 넘어감.

ideation

  • que 자료구조 활용
lis = [[1,2], [1,3],[3,4,5], [4,5,6,6]]

max_len=4
max_group = 2
def flatten(nest, groups):
  return sum(nest[:groups], [])
def pop_n(que,n):
  for i in range(n):
    if que:
      que.popleft()

from collections import deque
def list_grouping(nested_list, max_len, max_group ):
  result = []
  que = deque(maxlen=max_group)
  for li in nested_list:
    que.append(li)
    # 길이가 안차면 패스
    if len(que)<max_group:
      continue;  
    sample = flatten(list(que), max_group)
    # 길이가 길다면 group 줄이기
    if len(sample)>max_len:
      groups = max_group
      while len(flatten(list(que), groups))> max_len:
        groups-=1
      sample = flatten(list(que), groups)
      pop_n(que,groups)
    #길이가 문제 없다면
    else : 
      pop_n(que,max_group)

    result.append(sample)
  # 남은 것들을 append(flatten하여)
  if que:
    residue = flatten(list(que),len(que))
    result.append(residue)

  # 남은것들을 하나하나 append 하는 방법
  # while que: 
  #   result.append(que.popleft())
  return result


list_grouping(lis, max_len, max_group)


>>> [[1, 2, 1, 3], [3, 4, 5], [4, 5, 6, 6]]
profile
romantic ai developer

0개의 댓글