BOJ 2304 창고 다각형

LONGNEW·2020년 12월 29일
0

BOJ

목록 보기
14/333

https://www.acmicpc.net/problem/2304

시간 2초, 메모리 128MB
input :

  • N (1 <= N <= 1,000)

  • 기둥의 위치 L(index 처럼 보면 될 듯), 기둥의 높이 H(1 <= L, H <= 1,000)
    output :

  • 창고 다각형의 면적 출력


빗물 구하는 문제와 비슷한 듯.
현재 인덱스 기준 왼쪽에서 큰 item, 오른쪽에서 큰 item 구해서.
작은 item의 높이 와 현재 item 비교한 후에
현재 아이템이 더 크면 total 값엔 현재 아이템을 / 현재 아이템이 작으면 작은 item의 값을 total에 추가한다.

index 0 일때와 마지막 1001일 때를 넣어줘야 할 듯.

빗물 처럼 구하려니... 런타임 에러 계속 박힘/
찾아보니 다들 가장 높이 가 긴 기둥을 중심으로.
왼쪽에서 업데이트.
오른쪽에서 업데이트 하며 채워 감.

import sys

N = int(sys.stdin.readline())
buliding = [0] * 1001
data_list = []
for i in range(N):
    L, H = map(int, sys.stdin.readline().split())
    buliding[L] = H
    data_list.append((L, H))

data_list.sort(key= lambda x:-(x[0]))
last_idx = data_list[0][0]
data_list.sort(key= lambda x:x[0])
start_idx = data_list[0][0]
data_list.sort(key= lambda x:-(x[1]))
biggest_idx = data_list[0][0]

total = 0

idx = start_idx
height = 0
while idx < biggest_idx:
    height = max(buliding[idx], height)
    total += height
    idx += 1

idx = last_idx
height = 0
while idx > biggest_idx:
    height = max(buliding[idx], height)
    total += height
    idx -= 1

print(total + buliding[biggest_idx])


리스트 슬라이싱에 문제가 있었나...
여튼 시작 지점, 끝 지점, 기둥이 되는 지점을 가지고도 문제를 풀 수 있었다.

0개의 댓글