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

파이썬에서 행렬에서 최대값을 포함하는 셀을 찾는 프로그램

<시간/>

0으로 초기화된 n x n 행렬이 있다고 가정합니다. 이제 목록이 제공되고 여기에는 특정 행과 열 위치를 포함하는 몇 가지 쌍이 포함됩니다. 목록의 각 항목 i에 대해 행 번호와 열 번호가 목록에 있는 항목 i의 행 값과 열 값보다 작은 셀의 내용은 1씩 증가합니다. 모든 목록 요소를 순회한 후 최대값을 포함하는 행렬의 셀 수를 찾아야 합니다. (행 및 열 인덱스는 0에서 시작)

따라서 입력이 input_list =[[3, 5], [4, 6], [5, 3]]과 같으면 출력은 9가 됩니다. 5 x 6 행렬이라고 가정합니다. 처음에 행렬의 값은

0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0

목록의 첫 번째 요소를 순회한 후에는 -

가 됩니다.
1 1 1 1 1 0
1 1 1 1 1 0
1 1 1 1 1 0
0 0 0 0 0 0
0 0 0 0 0 0

목록의 두 번째 요소를 순회한 후에는 -

가 됩니다.
2 2 2 2 2 1
2 2 2 2 2 1
2 2 2 2 2 1
1 1 1 1 1 1
0 0 0 0 0 0

목록의 세 번째 요소를 순회한 후에는 -

가 됩니다.
3 3 3 2 2 1
3 3 3 2 2 1
3 3 3 2 2 1
2 2 2 1 1 1
1 1 1 0 0 0

행렬의 최대값은 3이고 해당 값을 포함하는 셀이 9개 있습니다.

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

  • xpos :=0
  • ypos :=0
  • input_list의 각 항목에 대해 다음을 수행합니다.
    • xpos가 0과 같으면
      • xpos :=item[0]
      • ypos :=항목[1]
    • 그렇지 않으면
      • xpos :=(xpos, item[0])의 최소값
      • ypos :=(ypos, item[1])의 최소값
  • 반환(xpos * ypos)

예시

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

def solve(input_list):
   xpos = 0
   ypos = 0
   for item in input_list:
      if xpos == 0:
         xpos = item[0]
         ypos = item[1]
      else:
         xpos = min(xpos,item[0])
         ypos = min(ypos,item[1])
   return (xpos * ypos)

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

입력

[[3, 5], [4, 6], [5, 3]]

출력

9