[baekjoon / Python] 22945 팀빌딩

yujeongkwon·2023년 5월 8일
0

baekjoon

목록 보기
7/8

문제 설명

능력치가 다 다른 개발자
N명이 팀 빌딩을 위해 한 줄로 서있다.

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

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

(개발자 A와 개발자 B 사이에 존재하는 다른 개발자 수) × min(개발자 A의 능력치, 개발자 B의 능력치)
예를 들어, 4명의 개발자가 존재할 때, 각 개발자의 능력치를 1 4 2 5라고 하자. 이때 능력치가 1인 개발자와 능력치가 5인 개발자가 한 팀을 이뤘다고 가정하자. 그러면 이 팀의 능력치는
2×min(1,5)=22×min(1, 5) = 2가 된다.

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

Comment

물구나무 서서 봐도 투포인터 문제
정렬을 하지 않아도 됨. 왜냐 A,B 사이 친구들 개수도 봐야하기 때문도 맞지만, only A랑 B중 누가 더 작냐만 봐도 어떤 포인터를 옮겨야 하는 지를 알 수 있는 기준이 되기 때문

maxAbility 값에 영향을 주는 것 = A와 B사이 개발자 수, A와 B중 능력치가 작은 놈

A와 B사이 개발자 수는 p1을 0, p2를 N-1로 잡아서 최대로 해둠
= 초기 A는 맨 처음 개발자, B를 맨 마지막에 서있는 개발자
A와 B 중 작은놈이 maxAbility를 찾기 위한 투 포인터 중 무엇을 옮기냐의 기준이 됨.
=A가 작다면 A말고 다른놈(p1++), B가 더 작다면 B말고 다른놈(p2--)을 사이 간격이 하나씩 줄어들게 하면서(어차피 최대였으니까) 선택하면 됨.

증말 해노코 보면 쉬운데 저 투 포인터를 어케 움직일까에 대한 기준을 자아아아알 생각해봐야겠서

코드

N = int(input())
ability = list(map(int,input().split()))
maxAbility,p1,p2= 0,0,N-1

while p1<=p2:
    maxAbility =max(maxAbility,(p2-p1-1)*min(ability[p1],ability[p2]))
    if ability[p1]<ability[p2]:
        p1+=1
    else:
        p2-=1
        
print(maxAbility)
profile
인생 살자.

0개의 댓글