문제요약
나의 코드 및 설명
- 순서 없이 입력된 기둥을 전부 리스트에 저장한 뒤, x좌표 기준으로 오름차순 정렬한다.
- 정렬된 리스트에서 높이가 가장 큰 인덱스를 찾고, 높이가 가장 큰 기둥의 좌측에 해당하는 값과 우측에 해당하는 값들을 각각 따로 구한 뒤 더해준다.
- 구해진 면적에 높이가 가장 큰 기둥의 면적을 더한다.
n = int(input())
pillar = []
for i in range(n):
l, h = map(int, input().split())
pillar.append((l,h))
#기둥 x좌표 순으로 오름차순 정렬
pillar.sort()
max_pillar_idx = 0
#오름차순 정렬한 기둥 리스트 중, 높이가 가장 큰 인덱스 찾기
for i in range(len(pillar)):
if pillar[max_pillar_idx][1] < pillar[i][1]:
max_pillar_idx = i
#높이가 가장 큰 인덱스의 기둥 면적
ans = 0
#높이가 가장 큰 인덱스 기준으로 좌측
h = pillar[0][1]
for i in range(0,max_pillar_idx): #0,3 #0,1,2/ max : 3
#만약 다음 기둥이 현재 기둥 높이보다 크다면
if pillar[i+1][1] > h:
#면적에 다음 기둥까지 거리와 높이를 곱한 값을 더해주고
ans += h*(pillar[i+1][0]-pillar[i][0])
#높이를 다음 기둥으로 최신화
h = pillar[i+1][1]
#그렇지 않다면 높이는 현재 높이 그대로 하고 면적만 더해주기
else:
ans += h*(pillar[i+1][0]-pillar[i][0])
#높이가 가장 큰 인덱스 기준으로 우측
h = pillar[-1][1]
for j in range(n-1,max_pillar_idx,-1): # (6,3) #6,5,4
#만약 다음 기둥이 현재 기둥 높이보다 크다면
if pillar[j-1][1] > h:
#면적에 다음 기둥까지 거리와 높이를 곱한 값을 더해주고
ans += h * (pillar[j][0]-pillar[j-1][0])
#높이를 다음 기둥으로 최신화
h = pillar[j-1][1]
#그렇지 않다면 높이는 현재 높이 그대로 하고 면적만 더해주기
else:
ans += h*(pillar[j][0]-pillar[j-1][0])
print(ans + pillar[max_pillar_idx][1])
피드백
분명히 풀이 방법은 올바르게 접근했고, 구현하는 데에도 난이도 있어보이진 않는데 이상하게 4번이나 틀렸다. 그리고,, 머릿 속에 있는 것을 구현할 때에 시간이 너무 오래걸린다. 시간단축을 위해 코드를 작성할 때 더욱 집중해서 코드를 짜봐야겠다.
'Baekjoon > IM Level' 카테고리의 다른 글
[백준] 9093 단어 뒤집기 (브론즈1) (0) | 2023.03.21 |
---|---|
[백준] 2292 벌집 (브론즈2) (0) | 2023.03.21 |
[백준] 1063 킹 (실버3) (2) | 2023.03.20 |
[백준] 13300 방 배정 (브론즈2) / 딕셔너리 (0) | 2023.03.18 |
[백준] 2999 비밀 이메일 (브론즈1) (0) | 2023.03.17 |