길이와 너비를 사용하여 표시되는 직사각형 목록이 있다고 가정합니다. 직사각형을 90도 회전할 수 있으므로 회전 후에 너비가 길이가 되고 그 반대도 마찬가지입니다. 너비가 증가하지 않는 순서로 직사각형을 정렬할 수 있는지 확인해야 합니다.
따라서 입력이 rects =[[4, 5], [5, 7], [4, 6]]과 같으면 회전하면 너비가 [5,7,6]이므로 출력은 True가 됩니다. 마지막 두 직사각형의 너비는 증가하지 않는 [5,5,4]가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- m :=99999
- 0에서 rect 크기의 범위에 있는 i에 대해
- i번째 직사각형의 길이와 너비의 최대값이 <=m이면
- m :=i번째 직사각형의 길이와 너비의 최대값
- 그렇지 않으면 i번째 직사각형의 길이와 너비의 최소값이 <=m
- 인 경우
- m :=i번째 직사각형의 길이와 너비의 최소값
- 그렇지 않으면
- 거짓을 반환
- i번째 직사각형의 길이와 너비의 최대값이 <=m이면
- 참 반환
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(rect): m = 99999 for i in range(len(rect)): if max(rect[i][0], rect[i][1]) <= m: m = max(rect[i][0], rect[i][1]) elif min(rect[i][0], rect[i][1]) <= m: m = min(rect[i][0], rect[i][1]) else: return False return True rects = [[4, 5], [5, 7], [4, 6]] print(solve(rects))
입력
[[4, 5], [5, 7], [4, 6]]
출력
True