새소식

백준 알고리즘

백준 문제풀기 [#2628번] - 종이자르기 문제

  • -

 

문제 푸는 방법: 

1. 입력받은 가로와 세로의 길이를 각각 가로배열 = [0, 가로] / 세로 배열=  [0, 세로] 의 배열에 넣어준다. 

2. 점선을 자르는 값이 (0, 값)으로 들어오면 가로로 자르는 점선이므로 1번에 만들어 준 가로 배열에 값을 넣어주고 

(1, 값)으로 들어오면 세로로 자르는 점선이므로 세로 배열에 값을 넣어준다. 

3. 가로 배열과 세로 배열을 sort()함수를 이용하여 오름차순으로 정렬해준 뒤, 각 근접해있는 값끼리의 차이를 계산하여 가장 차이가 큰 값만 추출해준다. 

4. 가로에서 차이가 큰 값과 세로에서 차이가 큰 값의 곱이 가장 큰 종이 조각이 된다. 

 


구현한 코드 

x, y = map(int, input().split())
a = [0, x]
b = [0, y]
n = int(input())

for i in range(1, n+1):
    num, value = map(int, input().split())
    if num == 1:
        a.append(value)

    else:
        b.append(value)

a.sort()
b.sort()
t = []
z = []

for i in range(len(a)-1):
    t.append(a[i+1] - a[i])

for i in range(len(b)-1):
    z.append(b[i+1] - b[i])

print(max(t)*max(z))
Contents

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

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