파이썬 백준 2628번
실버 5
https://www.acmicpc.net/problem/2628
문제 보기
분류: 정렬
문제 풀기
종이 세로의 처음과 끝, 종이 가로의 처음과 끝 그리고 잘라야 하는 주어진 위치를 2차원 리스트 cutting_ls 에 모두 입력 받는다.
2차원 리스트를 모두 오름차순으로 정렬을 하여 세로 요소를 순차적으로 그 다음 가로 요소를 순차적으로 한 쌍씩 빼내어 그 차이를 각각 나누어 저장한다.
height_ls 와 width_ls 에 저장된 잘린 길이의 차이값 중 각각 최대값을 빼내어 곱으로 그 넓이를 출력한다.
코드 보기
import sys
inputdata = sys.stdin.readline
def fnCutPaper(w, h):
cutting_ls.sort(key = lambda x :( x[0], x[1]))
print(f'cutting_ls sorted: {cutting_ls}') # TEST PRINT
height_ls = []
width_ls = []
for i in range(1, len(cutting_ls)):
if cutting_ls[i][0] == 0:
h_diff = cutting_ls[i][1] - cutting_ls[i - 1][1]
height_ls.append(h_diff)
elif cutting_ls[i][0] == 1:
w_diff = cutting_ls[i][1] - cutting_ls[i - 1][1]
width_ls.append(w_diff)
print(f'height_ls: {height_ls}') # TEST PRINT
print(f'width_ls: {width_ls}') # TEST PRINT
print(max(height_ls) * max(width_ls))
if __name__ == "__main__":
w, h = map(int, inputdata().split())
n = int(inputdata().strip())
cutting_ls = [[0, 0], [0, h], [1, 0], [1, w]]
for _ in range(n):
cutting_ls.append(list(map(int, inputdata().split())))
print(f'cutting_ls default: {cutting_ls}') # TEST PRINT
fnCutPaper(w, h)
'''
10 8
3
0 3
1 4
0 2
cutting_ls default: [[0, 0], [0, 8], [1, 0], [1, 10], [0, 3], [1, 4], [0, 2]]
cutting_ls sorted: [[0, 0], [0, 2], [0, 3], [0, 8], [1, 0], [1, 4], [1, 10]]
height_ls: [2, 1, 5]
width_ls: [-8, 4, 6]
30
'''
'공부하기 > 백준' 카테고리의 다른 글
[Java] 백준 풀기 25304 - 영수증 (0) | 2023.01.20 |
---|---|
[Python] 백준 풀기 2635 - 수 이어가기 (0) | 2023.01.19 |
[Java] 백준 풀기 1158 - 요세푸스 문제 (0) | 2023.01.17 |
[Java] 백준 풀기 17478 - 재귀함수가 뭔가요? (0) | 2023.01.16 |
[Java] 백준 풀기 2742 - 기찍 N (0) | 2023.01.15 |