JB의 이모저모

[BOJ 22945🥇4] 팀 빌딩 (Python) 본문

알고리즘/백준

[BOJ 22945🥇4] 팀 빌딩 (Python)

J B 2023. 10. 29. 15:18

 

https://www.acmicpc.net/problem/22945

 

22945번: 팀 빌딩

개발자 $N$명이 팀 빌딩을 위해 한 줄로 서있다. 하나의 팀을 만들기 위해서는 개발자 2명이 반드시 모여야 한다. 개발자 A와 개발자 B가 팀을 만들 때 팀의 능력치는 아래와 같이 계산이 된다. (개

www.acmicpc.net

문제

개발자 명이 팀 빌딩을 위해 한 줄로 서있다.

하나의 팀을 만들기 위해서는 개발자 2명이 반드시 모여야 한다.

개발자 A와 개발자 B가 팀을 만들 때 팀의 능력치는 아래와 같이 계산이 된다.

  • (개발자 A와 개발자 B 사이에 존재하는 다른 개발자 수) × min(개발자 A의 능력치, 개발자 B의 능력치)

예를 들어, 4명의 개발자가 존재할 때, 각 개발자의 능력치를 1 4 2 5라고 하자. 이때 능력치가 1인 개발자와 능력치가 5인 개발자가 한 팀을 이뤘다고 가정하자. 그러면 이 팀의 능력치는 가 된다.

팀 빌딩에서 나올 수 있는 팀 중 능력치의 최대값을 구해보자.

입력

첫 번째 줄에 개발자의 수 이 주어진다.

두 번째 줄에는 의 개발자의 각 능력치 x_i가 공백으로 구분되어 주어진다.

출력

팀의 능력치 최댓값을 출력한다.

제한

  • 는 정수

예제 입력 1

4
1 4 2 5

예제 출력 1

4

 

⭕ CODE

n = int(input())

arr = list(map(int,input().split()))

s = 0
e = n-1
result = 0

while s < e:

    result = max(result,(e-s-1)*min(arr[s],arr[e]))

    # s를 1더하든 e를 1 빼든 사이에 존재하는 개발자 수는 똑같다
    # 그렇다면 min값을 늘려야하기 때문에 작은애를 당겨준다.
    if arr[s] < arr[e]:
        s += 1
    else:
        e -= 1

print(result)

✏️ Comment

투포인터를 사용하여서 해결