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가 0과 같으면
- 반환(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