https://www.acmicpc.net/problem/2628
문제
내 풀이
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
해석
왜 남이 한 코드들은 이렇게 쉬워보일까.
'sw사관학교 정글 2기 > 01 기초,재귀,완전탐색, 정렬' 카테고리의 다른 글
[재귀함수]★★백준 1914번 하노이 with Python3 (0) | 2021.08.10 |
---|---|
[재귀함수] 백준 10869번 팩토리얼 with Python3 (0) | 2021.08.10 |
[기초-소수] ★★백준 9020번 골드바흐의 추측 with Python3 (0) | 2021.08.07 |
[기초-소수] ★백준 1978번 소수 찾기 with Python3 (0) | 2021.08.07 |
[기초-시간복잡도] ★백준 2869번 달팽이는 올라가고 싶다 with Python3 (0) | 2021.08.07 |
댓글