Baekjoon/IM Level

[백준] 2628 종이자르기 (실버5)

hellosonic 2023. 3. 10. 20:39

문제요약

나의 코드 및 설명

  • 가로, 세로 범위가 최대 100cm라고 했고, 케이스가 많을 것 같지 않아서 
    가로로 잘랐을 때 쪼개진 세로 눈금들의 길이와, 세로로 잘랐을 때 쪼개진 가로 눈금들의 길이를 곱해서 최대값을 찾았다.
  • n,m : 가로와 세로를 입력한다.
  • cut : 자르는 총 횟수를 입력한다.
  • x_points, y_points : 잘랐을 때 나오는 사각형의 가로축의 꼭지점과 세로축의 꼭지점을 저장할 수 있는 리스트를 선언한다.
  • x_width, y_height : 잘랐을 때 나오는 사각형의 가로 길이와 세로 길이를 저장할 수 있는 리스트를 선언한다.
n, m = map(int, input().split())
cut = int(input())

x_points = [0]
y_points = [0]

x_points.append(n)
y_points.append(m)

for i in range(cut):
    direction, point = map(int, input().split())
    if direction == 0:
        y_points.append(point)
    elif direction == 1:
        x_points.append(point)

x_points.sort()
y_points.sort()

x_width = []
y_height = []

for i in range(len(x_points)-1):
    if i == len(x_points) - 1:
        continue
    x_width.append(x_points[i+1]-x_points[i])
for j in range(len(y_points)-1):
    if j == len(y_points) - 1:
        continue
    y_height.append(y_points[j+1]-y_points[j])

area = 0
fin = 0

for x in x_width:
    for y in y_height:
        area = x*y
        if area >= fin:
            fin = area
        else:
            continue

print(fin)

피드백

처음 문제를 보았을 때 헤맸었는데, 다시 풀어보니 어렵지 않게 풀 수 있었다.

가로의 최대 길이와 세로의 최대 길이가 100cm 인 것을 보고 케이스가 많지 않다고 생각했고, 잘라진 사각형의 가로 길이와 세로 길이를 일일이 구해도 시간초과가 뜨지 않을 것 같다고 생각해서 위와 같이 풀었는데 맞았다.