백준

백준 2304 창고 다각형 (파이썬)

MC류짱 2022. 10. 20. 21:44

풀이 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)

 


후기

  • 오랜만의 알고리즘 풀이라 남는 시간 대비 난이도가 적당한 것을 잡았다.
  • 투 포인터 방식으로 제일 큰 기둥을 중심으로 양 쪽에서 접근한다.
  • 이런 문제 유형도 오랜만에 풀어봐서 시간을 좀 낭비했다..