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

파이썬에서 주어진 공을 차지하는 상자의 위치 찾기


두 개의 배열 A와 B가 있다고 가정합니다. A의 크기는 행의 수이고 A[i]는 i번째 행의 상자 수입니다. 그리고 B는 공의 배열입니다. 여기서 B[i]는 공의 숫자를 나타냅니다. 공 i(값 B[i])는 시작 위치가 B[i]인 상자에 배치됩니다. 각 B[i]에 해당하는 상자의 행과 열을 찾아야 합니다.

따라서 입력이 A =[3, 4, 5, 6], B =[1, 3, 5, 2]인 경우 출력은 [(1, 1), (1, 3), ( 2, 2), (1, 2)] B[0] =1이면 상자 위치는 첫 번째 행, 첫 번째 열 B[1] =3이 되고 상자 위치는 첫 번째 행, 세 번째 열, B가 됩니다. [2] =5이면 상자 위치는 2행, 2열, B[3] =2가 되고 상자 위치는 1행, 2열이 됩니다.

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

  • len_a :=A의 크기

  • len_b :=B의 크기

  • 범위 1에서 len_a까지의 i에 대해 수행

    • A[i] :=A[i] + A[i - 1]

  • 범위 0에서 len_b에 있는 i에 대해 수행

    • row :=정렬된 A를 유지하기 위해 B[i]를 삽입할 수 있는 인덱스

    • 행>=1이면

      • box_num :=B[i] - A[행 - 1]

    • 그렇지 않으면

      • box_num :=B[i]

    • 쌍을 표시합니다(행 + 1, box_num)

예시

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

import bisect
def get_position(A, B):
   len_a = len(A)
   len_b = len(B)
   for i in range(1, len_a):
      A[i] += A[i - 1]
   for i in range(len_b):
      row = bisect.bisect_left(A, B[i])
      if row >= 1:
         box_num = B[i] - A[row - 1]
      else:
         box_num = B[i]
      print ((row + 1, box_num))
A = [3, 4, 5, 6]
B = [1, 3, 5, 2]
get_position(A, B)

입력

[3, 4, 5, 6], [1, 3, 5, 2]

출력

(1, 1)
(1, 3)
(2, 2)
(1, 2)