#include <stdio.h>
#include <stdlib.h>
void RunC()
{
int N;
scanf(" %d", &N);
int* arr = (int*)malloc(N * sizeof(int));
int* s = (int*)malloc(N * sizeof(int));
int* t = (int*)malloc(N * sizeof(int));
int ls = 0;
int lt = 0;
int penalty = 0;
for(int i = 0; i < N; ++i)
scanf(" %d", &arr[i]);
for(int i = 0; i < N; ++i)
{
if(i == 0)
s[ls++] = arr[i];
else if(i == 1)
t[lt++] = arr[i];
else
{
if(s[ls - 1] < arr[i] && t[lt - 1] < arr[i]) // 만약 penalty가 늘어야만 한다면
{
if(s[ls - 1] < t[lt - 1]) // s에 넣는게 이득이라면
s[ls++] = arr[i];
else
t[lt++] = arr[i];
++penalty;
}
else if(s[ls - 1] >= arr[i] && t[lt - 1] < arr[i]) // 만약 s에 넣었을 때만 penalty가 없다면
{
s[ls++] = arr[i];
}
else if(s[ls - 1] < arr[i] && t[lt - 1] >= arr[i]) // 만약 t에 넣었을 때만 penalty가 없다면
{
t[lt++] = arr[i];
}
else // 만약 어디에 넣어도 penalty가 없다면
{
if(s[ls - 1] < t[lt - 1])
s[ls++] = arr[i];
else
t[lt++] = arr[i];
}
}
}
printf("%d\n", penalty);
free(arr);
free(s);
free(t);
}
int main()
{
int tc; scanf(" %d", &tc);
while(tc--)
RunC();
return 0;
}
첫번째 원소랑 두번째 원소가 같은데에 드갈수도 있는거 아님?
두번째 for문에서 if(i == 0) s[ls++] = arr[i]; else if(i == 1) t[lt++] = arr[i]; 해가지고 첫번째 원소는 s 두번째 원소는 t에 들어갈텐데
굳이 다른데에 넣을 필요가 없단 뜻이었음 초기에는 그냥 10^9같은거라도 넣어두셈
1 1 2
와 이거 어떻게하지
해당 댓글은 삭제되었습니다.
여러분매우감사