728x90
반응형
주어진 정렬된 정수 배열 a에서 다음의 식을 최소화하는 요소 x를 찾아야 합니다:
abs(a[0]−x)+abs(a[1]−x)+…+abs(a[a.length−1]−x)
여기서 abs는 절댓값을 나타냅니다. 이때, 여러 가능한 해가 있다면 가장 작은 값을 출력해야 합니다.
예를 들어, 배열 a가이라면, 각 요소와의 거리의 합을 최소화하려면 는 중간값인 4여야 합니다. 왜냐하면 abs(2−4)+abs(4−4)+abs(7−4)=2+0+3=5 로 가장 작은 값을 갖기 때문입니다.
이러한 문제를 해결하기 위해서는 다음과 같은 방법을 사용할 수 있습니다:
만약 배열의 길이가 홀수이면, 중앙 인덱스의 값이 최적의가 됩니다.
만약 배열의 길이가 짝수이면, 중앙 두 값 중 어떤 것을 선택해도 상관없습니다. 예를 들어, 중앙 두 값의 평균값이나 중앙 두 값 중 작은 값 등을 고려할 수 있습니다.
이러한 방법을 사용하여 최적의를 찾을 수 있습니다. 코드로 구현하면 다음과 같습니다:
User
int solution(int[] a) {
Array.Sort(a);
int idx = a.Length/2;
if(a.Length%2==0){
idx--;
}
return a[idx];
}
Array.Sort(a): 배열 a를 오름차순으로 정렬합니다.
int idx = a.Length/2;: 배열의 중앙 인덱스를 계산합니다.
if(a.Length%2==0) { idx--; }: 만약 배열의 길이가 짝수이면 중앙 두 값 중 작은 값을 선택해야 하므로 idx를 하나 줄입니다.
return a[idx];: 최적의값인 중앙 또는 중앙 두 값 중 작은 값을 반환합니다.
이 코드는 배열의 길이에 따라 홀수일 때는 중앙값을, 짝수일 때는 중앙 두 값 중 작은 값을 선택하여 최적의 를 찾습니다. 예를 들어, 배열 의 경우, 정렬 후 이 되고 중앙값은 4이므로 4를 반환합니다. 배열 의 경우, 정렬 후 가 되고 중앙 두 값은 4와 7이므로 작은 값인 4를 반환합니다.
728x90
반응형
'CodeSignal' 카테고리의 다른 글
chessBoardCellColor (2) | 2023.12.17 |
---|---|
stringsRearrangement (1) | 2023.12.17 |
depositProfit (0) | 2023.12.16 |
alphabeticShift (0) | 2023.12.16 |
variableName (0) | 2023.12.16 |