left, right 포인터를 양 끝단에 두고 점점 좁혀오는 방식으로 시도해봤다. 답이 틀렸다고 떴다.
import sys
input = sys.stdin.readline
N = int(input())
arr = list(map(int, input().split()))
left, right = 0, N-1
answer = 0
while left < right:
people_between_two = right - left - 1
answer = max(answer, people_between_two * min(arr[left], arr[right]))
next_left = min(arr[left], arr[right-1])
next_right = min(arr[right], arr[left+1])
if next_left >= next_right:
right -= 1
else:
left += 1
print(answer)
고려하지 못한 케이스들이 있는 것 같아 이번엔 left 포인터를 for문으로 하나씩 순회해 주었다. 이번에는 시간초과가 났다.
그 외의 다른 방법이 30분 안에 생각나지 않아서 풀이를 참고하였다. 시도했던 방법은 맞았는데, 복잡하게 다음 시행을 비교할 필요도 없이 현재 포인터의 값을 비교하면 되었던 문제였다.
import sys
input = sys.stdin.readline
N = int(input())
arr = list(map(int, input().split()))
answer = 0
left, right = 0, N-1
while left + 1 < right:
people_between_two = right - left - 1
answer = max(answer, people_between_two * min(arr[left], arr[right]))
if arr[right] > arr[left]:
left += 1
else:
right -= 1
print(answer)
'알고리즘' 카테고리의 다른 글
[백준/파이썬] #11657 (0) | 2025.04.04 |
---|---|
[백준/파이썬] #13549 (0) | 2025.04.01 |
[백준/파이썬] #15961 (0) | 2025.03.29 |
[백준/파이썬] #1806 (0) | 2025.03.28 |
[백준/파이썬] #22862 (0) | 2025.03.27 |