
풀이 and 해설(주석)
import sys
N = int(sys.stdin.readline())
max_hei = 0
max_idx = 0
len_info = 0
# 기둥의 최대 수는 1000, 입력되는 위치에 기둥을 추가 할 것
record = [0] * 1001
for _ in range(N):
p, h = map(int, sys.stdin.readline().strip().split())
# 가장 높은 기둥을 중심으로 양쪽에서 접근 할 것이므로 가장 높은 기둥의 위치 정보가 필요함
if h > max_hei:
max_hei = h
max_idx = p
# 마지막 기둥이 있는 위치
len_info = max(len_info, p)
record[p] = h
rst = 0
tmp = 0
# 첫 위치부터 제일 큰 기둥이 있는 위치까지 비교하며 값을 저장
for i in range(max_idx):
if tmp >= record[i+1]:
rst += tmp
else:
rst += tmp
tmp = record[i+1]
tmp = 0
# 맨 오른쪽의 기둥부터 제일 큰 기둥이 있는 위치까지 접근하며 값을 저장
for i in range(len_info+1, max_idx, -1):
if tmp >= record[i - 1]:
rst += tmp
else:
rst += tmp
tmp = record[i - 1]
print(rst+max_hei)
후기
- 오랜만의 알고리즘 풀이라 남는 시간 대비 난이도가 적당한 것을 잡았다.
- 투 포인터 방식으로 제일 큰 기둥을 중심으로 양 쪽에서 접근한다.
- 이런 문제 유형도 오랜만에 풀어봐서 시간을 좀 낭비했다..
'백준' 카테고리의 다른 글
백준 9020 골드바흐의 추측 (파이썬) (0) | 2022.10.23 |
---|---|
백준 1149 RGB거리 (파이썬) (0) | 2022.10.23 |
백준 2644 촌수계산 (파이썬) (1) | 2022.10.18 |
백준 16236 아기 상어 (파이썬) (0) | 2022.10.09 |
백준 17471 게리맨더링 (파이썬) (1) | 2022.10.08 |