새소식

반응형
Algotithms

[백준] 16937 두 스티커

  • -
728x90
반응형

문제

  • 크기가 HxW인 모눈종이에 N개 중 2개의 스티커를 붙인다.
    • 1 <= H, W, N <= 100 
  • 두 스티커는 겹치면 안되고, 모눈 종이를 벗어나서도 안되고, 비스듬하게 붙일 수도 없다.
  • 단, 90도 회전은 가능할 때, 두 스티커가 붙여진 넓이의 최댓값은?
  • 두 스티커를 붙일 수 없는 경우에는 0을 출력

 

 

풀이

  • 스티커 2개만 붙이면 되니까 100개 중 2개 조합을 완전 탐색으로 풀 수 있다.
  • 경우의 수는 총 8가지
    • 옆으로 나란히 붙이고, ( 둘 다 회전 안할 때, 1번만 회전할 때, 2번만 회전할 때, 둘 다 회전할 때)
    • 위아래로 붙이고, ( 둘 다 회전 안할 때, 1번만 회전할 때, 2번만 회전할 때, 둘 다 회전할 때)
H, W = map(int, input().split())
N = int(input())
stickers = []
for _ in range(N):
    a, b = map(int, input().split())
    stickers.append((a, b))

answer = 0          # 정답 변수
for i in range(N):
    h1, w1 = stickers[i]
    for j in range(i+1, N):
        h2, w2 = stickers[j]
        # 옆으로 나란히 붙이기
        if (w1 + w2 <= W and max(h1, h2) <= H) or (w1 + h2 <= W and max(h1, w2) <= H) or (h1 + h2 <= W and max(w1, w2) <= H) or (h1 + w2 <= W and max(w1, h2) <= H) :
            answer = max(answer, h1*w1 + h2*w2)

        # 위아래로 붙이기
        elif (h1 + h2 <= H and max(w1, w2) <= W) or (h1 + w2 <= H and max(w1, h2) <= W) or (w1 + w2 <= H and max(h1, h2) <= W) or (w1 + h2 <= H and max(h1, w2) <= W) :
            answer = max(answer, h1*w1 + h2*w2) 
            
print(answer)

 

(추가)

  • 처음부터 붙일 수 없는 스티커를 제외하고 길이 확인을 간단하게 하려고 했는데, 6%에서 실패한다. 
H, W = map(int, input().split())
N = int(input())
stickers = []
for _ in range(N):
    a, b = map(int, input().split())
    # 붙일 수 없는 스티커는 제외한다.
    if (a > H and a > W) or (b > H and b > W):  continue
    stickers.append((a, b))

answer = 0          # 정답 변수
n = len(stickers)   # 붙일 수 있는 스티커 개수

for i in range(n):
    h1, w1 = stickers[i]
    for j in range(i+1, n):
        h2, w2 = stickers[j]
        # 옆으로 나란히 붙이기
        if w1 + w2 <= W or w1 + h2 <= W or h1 + h2 <= W or h1 + w2 <= W :
            answer = max(answer, h1*w1 + h2*w2)
        # 위아래로 붙이기
        elif h1 + h2 <= H or h1 + w2 <= H or w1 + w2 <= H or w1 + h2 <= H :
            answer = max(answer, h1*w1 + h2*w2)

print(answer)

 

  • 반례 찾았다. 회전했을 때 최대 길이를 검사해줘야 한다!
6 7
2
5 3
2 7

 

 

 

References

  • 백준 16937번
  • 2023.04.27 오늘의 문제
반응형

'Algotithms' 카테고리의 다른 글

[백준] 1021 회전하는 큐  (0) 2023.04.28
[백준] 17144 미세먼지 안녕!  (0) 2023.04.27
[프로그래머스] 연속 펄스 부분 수열의 합  (0) 2023.04.26
[백준] 1238 파티  (0) 2023.04.26
[백준] 16956 늑대와 양  (0) 2023.04.26
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.