본문 바로가기
알고리즘

[백준/파이썬] #22945

by 룰루루 2025. 3. 31.

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