Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 godown에 몇 개의 상자를 넣을 수 있는지 알아내는 프로그램

<시간/>

정수를 포함하는 두 개의 배열이 있다고 가정합니다. 한 목록에는 일부 단위 너비 상자의 높이가 포함되고 다른 배열에는 godown의 방 높이가 포함됩니다. 방의 번호는 0...n이고 방의 높이는 배열 godown의 해당 인덱스에 제공됩니다. 우리는 godown에 밀어 넣을 수 있는 상자의 수를 찾아야 합니다. 몇 가지를 염두에 두어야 합니다.

  • 상자를 서로 겹칠 수 없습니다.

  • 상자의 순서는 변경될 수 있습니다.

상자는 어느 쪽에서나 godown에 넣습니다. 왼쪽 또는 오른쪽이 될 수 있습니다. 상자가 방의 높이보다 높으면 오른쪽에 있는 모든 상자와 함께 상자를 아래쪽으로 밀어 넣을 수 없습니다.

따라서 입력이 상자 =[4, 5, 6], godown =[4, 5, 6, 7]과 같으면 출력은 3이 됩니다. 입력으로 제공된 세 개의 상자는 모두 godown에 넣을 수 있습니다.

Python에서 godown에 몇 개의 상자를 넣을 수 있는지 알아내는 프로그램

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 목록 상자를 내림차순으로 정렬

  • 내가 :=0

  • r :=godown의 크기 - 1

  • 바이 :=0

  • 렛 :=0

  • 동안 bi <상자 크기 및 l <=r, do

    • godown[l]> godown[r]이면

      • 상자[bi] <=godown[l]이면

        • 렛 :=렛 + 1

        • l :=l + 1

      • 그렇지 않으면

        • 상자[bi] <=godown[r]이면

          • 렛 :=렛 + 1

          • r :=r - 1

      • 바이 :=바이 + 1

  • 리턴 렛

예제(파이썬)

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

def solve(boxes, godown):
   boxes.sort(reverse = True)

   l, r = 0, len(godown) - 1
   bi, ret = 0, 0
   while bi < len(boxes) and l <= r:
      if godown[l] > godown[r]:
         if boxes[bi] <= godown[l]:
            ret += 1
            l += 1
      else:
         if boxes[bi] <= godown[r]:
            ret += 1
            r -= 1
      bi += 1

   return ret

print(solve([4, 5, 6], [4, 5, 6, 7]))

입력

[4, 5, 6], [4, 5, 6, 7]

출력

3