![](https://blog.kakaocdn.net/dn/bMwnNJ/btsKtMjhea8/BPpScwPZKfYfDTSpJyhGmK/img.png)
두 개를 선택하는 모든 경우의 수를 고르기엔 N의 최대값이 100000이기 때문에 시간초과가 발생할 수 밖에 없다.
브루트포스를 제외하면 일차원 배열에서 두 개의 수를 선택하여 값을 구하는 문제는 보통 투포인터이기 때문에 투포인터로 접근해보았다.
투포인터를 양 끝에서부터 시작해서 안쪽으로 움직이게 한다면, 두 개발자의 능력치 최소값은 커질수도 있고 작아질수도 있지만 개발자 사이에 존재하는 다른 개발자의 수는 항상 작아진다. 즉 하나의 변수가 고정이된 것이다.
그러므로 먼저 양 끝에서부터 안쪽으로 투포인터가 이동하도록 하였다. 그렇다면 남은 것은 두 개발자의 능력치 최소치인데, 이 값은 그리디적으로 생각하였다. 현재 투 포인터가 가리키고 있는 두 개발자중 능력치가 더 낮은 쪽의 포인터가 안쪽으로 이동하도록 하였다.
#include <iostream>
#include <vector>
#include <climits>
void Init()
{
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
}
int main()
{
Init();
int NumDeveloper = 0;
std::cin >> NumDeveloper;
std::vector<int> Stats(NumDeveloper);
for (int i = 0; i < NumDeveloper; i++)
{
std::cin >> Stats[i];
}
int Left = 0;
int Right = NumDeveloper - 1;
int Answer = 0;
while (Left <= Right)
{
int Dist = Right - Left - 1;
Answer = std::max(Answer, Dist * std::min(Stats[Left], Stats[Right]));
if (Stats[Left] < Stats[Right])
{
Left++;
}
else
{
Right--;
}
}
std::cout << Answer;
return 0;
}
'매일매일 코테풀기 (일시 중단!)' 카테고리의 다른 글
(2024-11-03) 2 문제 : 백준 - 1202 (보석 도둑) (0) | 2024.11.03 |
---|---|
(2024-11-03) 1 문제 : 백준 - 2560 (짚신벌레) (1) | 2024.11.03 |
(2024-11-02) 1 문제 : 백준 - 1941 (소문난 칠공주) (0) | 2024.11.02 |
(2024-11-01) 2 문제 : 백준 - 1937 (욕심쟁이 판다) (0) | 2024.11.01 |
(2024-11-01) 1 문제 : 백준 - 1103 (서울 지하철 2호선) (0) | 2024.11.01 |