728x90
반응형
https://www.acmicpc.net/problem/2304
2304번: 창고 다각형
첫 줄에는 기둥의 개수를 나타내는 정수 N이 주어진다. N은 1 이상 1,000 이하이다. 그 다음 N 개의 줄에는 각 줄에 각 기둥의 왼쪽 면의 위치를 나타내는 정수 L과 높이를 나타내는 정수 H가 한 개의
www.acmicpc.net
문제 해결
- 새로운 유형X
- 오목하게 들어간 부분이 없다는 것에서 최고 높이의 기둥 좌표를 알아야한다.
- 가장 왼쪽에서 최고 높이 좌표까지, 가장 오른쪽에서 최고 높이 좌표까지 이웃한 기둥 사이의 영역의 넓이를 계산해준다.
- 높이가 올라가면 앞으로 넓이가 더 커질 것이므로 타겟 높이를 설정해서 높이가 올라가면 바꿔주고 아니면 유지시킨다.
CODE
import sys
input = sys.stdin.readline
def main():
idx = 0
answer = 0
for i, l in enumerate(I):
if l[1] > answer:
answer = l[1]
idx = i
h = I[0][1]
for i in range(idx):
answer += h * (I[i + 1][0] - I[i][0])
if h < I[i + 1][1]:
h = I[i + 1][1]
h = I[-1][1]
for i in range(n - 1, idx, -1):
answer += h * (I[i][0] - I[i - 1][0])
if h < I[i - 1][1]:
h = I[i - 1][1]
return answer
if __name__ == "__main__":
n = int(input())
I = []
for _ in range(n):
L, H = map(int, input().split())
I.append((L,H))
I.sort(key = lambda x: x[0])
answer = main()
print(answer)
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 11562 백양로 브레이크 (1) | 2024.04.03 |
---|---|
[python] 백준 5376 소수를 분수로 (0) | 2024.03.28 |
[python] 백준 1315 RPG (0) | 2024.03.11 |
[python] 백준 14426 접두사 찾기 (0) | 2024.03.10 |
[python] 백준 16724 피리 부는 사나이 (0) | 2024.03.08 |
댓글