728x90
반응형
문제
크기가 H×W인 모눈종이와 스티커 N개가 있다. i번째 스티커의 크기는 Ri×Ci이다. 모눈종이는 크기가 1×1인 칸으로 나누어져 있으며, 간격 1을 두고 선이 그어져 있다.
오늘은 모눈종이에 스티커 2개를 붙이려고 한다. 스티커의 변은 격자의 선과 일치하게 붙여야 하고, 두 스티커가 서로 겹치면 안 된다. 단, 스티커가 접하는 것은 가능하다. 스티커를 90도 회전시키는 것은 가능하다. 스티커가 모눈종이를 벗어나는 것은 불가능하다.
두 스티커가 붙여진 넓이의 최댓값을 구해보자.
입력
첫째 줄에 모눈종이의 크기 H, W, 둘째 줄에 스티커의 수 N이 주어진다. 다음 N개의 줄에는 스티커의 크기 Ri, Ci가 주어진다.
출력
첫째 줄에 두 스티커가 붙여진 넓이의 최댓값을 출력한다. 두 스티커를 붙일 수 없는 경우에는 0을 출력한다.
예제 입력 1
2 2
2
1 2
2 1
예제 출력 1
4
예제 입력 2
10 9
4
2 3
1 1
5 10
9 11
예제 출력 2
56
✔️ Code
import sys
h, w = map(int, input().split())
n = int(input())
stickers = list(list(map(int, sys.stdin.readline().split())) for _ in range(n))
result = 0
for i in range(n):
for j in range(i + 1, n):
r1, c1 = stickers[i]
r2, c2 = stickers[j]
if (r1 + r2 <= h and max(c1, c2) <= w) or (max(r1, r2) <= h and c1 + c2 <= w):
result = max(result, r1*c1 + r2*c2)
if (c1 + r2 <= h and max(r1, c2) <= w) or (max(c1, r2) <= h and r1 + c2 <= w):
result = max(result, r1*c1 + r2*c2)
if (c1 + c2 <= h and max(r1, r2) <= w) or (max(c1, c2) <= h and r1 + r2 <= w):
result = max(result, r1*c1 + r2*c2)
if (r1 + c2 <= h and max(c1, r2) <= w) or (max(r1, c2) <= h and c1 + r2 <= w):
result = max(result, r1*c1 + r2*c2)
print(result)
✏️ Comment
스티커 중 2개를 골라서 1. 둘 다 회전하지 않을 경우 2. 첫번째 스티커만 회전할 경우 3. 두번째 스티커만 회전할 경우 4. 둘 다 회전할 경우를 각각 따져주는 if문을 작성해서 max값을 비교해 찾으면 된다.
728x90
반응형
'백준 > 정렬, 탐색' 카테고리의 다른 글
[백준🥈4] #1018 체스판 다시 칠하기 (python) (0) | 2022.07.25 |
---|---|
[백준🥈5] #1436 영화감독 숌 (python) (0) | 2022.07.25 |
[백준🥈4] #5568 카드 놓기 (python) (0) | 2022.07.21 |
[백준] #3040 백설공주와 난쟁이 (python) (0) | 2022.07.20 |
[백준] #4690 완전 세제곱 (python) (0) | 2022.07.19 |
댓글