sw사관학교 정글 2기/01 기초,재귀,완전탐색, 정렬
[기초-구현] 백준 2628번 종이자르기 with Python3
금의야행
2021. 8. 8. 20:01
https://www.acmicpc.net/problem/2628
2628번: 종이자르기
아래 <그림 1>과 같이 직사각형 모양의 종이가 있다. 이 종이는 가로방향과 세로 방향으로 1㎝마다 점선이 그어져 있다. 가로 점선은 위에서 아래로 1번부터 차례로 번호가 붙어 있고, 세로 점선
www.acmicpc.net
문제
내 풀이
length = list(map(int, input().split()))
cutno = int(input())
hor = int(length[0])
ver = int(length[1])
horcord = []
vercord = []
for i in range(hor):
horcord.append('*')
for i in range(ver):
vercord.append('*')
counthor = 0
countver = 0
cuthor = []
cutver = []
for _ in range(cutno):
Cut = list(map(int, input().split()))
if Cut[0] == 1:
cuthor.append(int(Cut[1]))
else:
cutver.append(int(Cut[1]))
cuthor.sort()
cutver.sort()
for i in range(len(cuthor)):
index = int(cuthor[i]) + counthor
horcord.insert(index, 'X')
counthor += 1
for i in range(len(cutver)):
index = int(cutver[i]) + countver
vercord.insert(index, 'X')
countver += 1
horstr = ''.join([str(elem) for elem in horcord])
verstr = ''.join([str(elem) for elem in vercord])
horlist = horstr.split('X')
verlist = verstr.split('X')
a = int(len(max(horlist, key=len)))*int(len(max(verlist, key=len)))
print(a)
해설
각 변을 list로 표현했다. 처음엔 숫자를 넣었는데 str화 시키는 과정에서 10, 100 부터 추가적인 자리를 가져가 문제가 생겼었다.
그리고 잘라야하는 위치를 X로 표현했다.
구현에 여러 트러블들이 있었다...
정답 풀이
x, y = map(int, input().split())
x_list = [0, x] #가로 각각 길이
y_list = [0, y] #세로 각각 길이
for _ in range(int(input())):
xy, length = map(int, input().split())
if xy == 0:
y_list.append(length)
else:
x_list.append(length)
x_list.sort() #좌, 위쪽부터 꺼내서 대조 하기 위함
y_list.sort()
max_square = 0
for i in range(1, len(x_list)):
for j in range(1, len(y_list)):
width = x_list[i] - x_list[i-1]
height = y_list[j] - y_list[j-1]
max_square = max(max_square, width * height) #가장 큰 범위
print(max_square)
출처:https://claude-u.tistory.com/451
해석
왜 남이 한 코드들은 이렇게 쉬워보일까.