https://www.acmicpc.net/problem/2304
가장 높은 기둥을 기준으로 좌 우로 나눔
왼쪽
0부터 시작해서 가장 높은 기둥의 index까지
우선 height는 가장 첫 번째 기둥 높이로 초기화한다
결과값에 height*(다음 기둥 위치-현재 기둥 위치)를 더해서 면적을 업데이트한다
만약 현재 기둥보다 다음 기둥이 높은 경우에는 height값을 다음 기둥 높이로 업데이트한다
오른쪽은
이 과정을 끝에서부터 가장 높은 기둥의 index까지 역순으로 진행한다
height는 가장 마지막 기둥 높이로 초기화 한다
결과값에 height*(현재 기둥 위치-이전 기둥 위치)를 더한다
마찬가지로 현재까지 탐색한 기둥 중 가장 높은 기둥을 height에 업데이트 해야 한다
굿!
이 분의 풀이를 참고했다!
n = int(input())
info=[]
result=0
for i in range(n):
position, height = map(int,input().split())
info.append([position, height])
info.sort()
i=0
for h in info:
if h[1]>result:
result=h[1]
idx=i
i+=1
height = info[0][1]
for i in range(idx):
if height<info[i+1][1]:
result+=height*(info[i+1][0]-info[i][0])
height=info[i+1][1]
else:
result+=height*(info[i+1][0]-info[i][0])
height=info[-1][1]
for i in range(n-1, idx, -1):
if height<info[i-1][1]:
result+=height*(info[i][0]-info[i-1][0])
height=info[i-1][1]
else:
result+=height*(info[i][0]-info[i-1][0])
print(result)
'개발자 강화 > 코딩 테스트' 카테고리의 다른 글
[백준] 11501 주식 / 그리디 / python 실2 (0) | 2024.12.01 |
---|---|
[백준] 2668 숫자고르기 / dfs / python 골5 (0) | 2024.11.30 |
[백준] 20922 겹치는 건 싫어 / 구현 / Python 실1 (0) | 2024.11.28 |
[백준] 21921 블로그 / 구현 / Python 실3 (0) | 2024.11.27 |
[백준] 9935 문자열 폭발 / 구현 / Python 골4 (1) | 2024.11.26 |