-
#AIL_23.11.09 // Programmers_중앙값 구하기AIL( Algorithm I Learned) 2023. 11. 9. 20:21
## AIL_중앙값 구하기
***문제 설명
중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.
***제한사항
array의 길이는 홀수입니다.
0 < array의 길이 < 100
-1,000 < array의 원소 < 1,000
***입출력 예
array result [1, 2, 7, 10, 11] 7 [9, -1, 0] 0
***입출력 예 설명
입출력 예 #1 본문과 동일합니다.
입출력 예 #2 9, -1, 0을 오름차순 정렬하면 -1, 0, 9이고 가장 중앙에 위치하는 값은 0입니다.
## solution.JavaScript
1. 문제의 접근 방식
이 문제는 주어진 정수 배열에서 중앙값을 찾는 것입니다.
1) `array.sort((a,b) => a - b);
주어진 배열을 오름차순으로 정렬합니다.
2) `answer = array[(array.length - 1) / 2];`
정렬된 배열에서 중앙값에 해당하는 인덱스를 계산하여 이를 answer에 할당합니다.
문제의 조건에 따라 배열의 길이가 홀 수이므로 정확히 중앙에 위치한 값을 선택하는 것이 가능합니다.
2. 문제풀이
function solution(array) { var answer = 0; array.sort((a, b) => a - b); answer = array [(array.length-1)/2]; return answer; } /* 테스트 1 입력값 〉 [1, 2, 3, 4, 5] 기댓값 〉 3 테스트 2 입력값 〉 [9, -1, 0] 기댓값 〉 0 */
3. 다른사람의 문제풀이 및 접근방식 분석
function solution(array) { return array.sort((a, b) => a - b)[Math.floor(array.length / 2)]; } /* 테스트 1 입력값 〉 [1, 2, 3, 4, 5] 기댓값 〉 3 테스트 2 입력값 〉 [9, -1, 0] 기댓값 〉 0 */
1) `array.sort((a,b) => a -b)`
주어진 배열을 오름차순으로 정렬합니다. `array.sort` 메서드에 정렬 비교 함수를 전달하여 오름차순으로 전달하고 있습니다.
2) `[Math.floor(array.length / 2)]`
정렬된 배열에서 중앙값에 해당하는 인덱스를 계산합니다. `array.length / 2 `는 배열의 중앙 인덱스를 나타내지만 , 배열의 길이가 홀수인 경우에 중앙값은 정확히 중앙에 위치한 값이기 때문에 ` Math.floor ` 함수를 사용하여 소수점을 버립니다.
3) 전체 표현식의 결과로 중앙값이 반환됩니다.
# 문제 풀이 중 sort와 Math.floor 방법이 가독성이 좋고 간단하지만 배열을 정렬하는데 시간복잡도가 O(n log n) 소요됩니다. 대부분의 경우 원본 배열의 순서를 유지하는 것이 중요하기 때문에 첫 번째 방법을 사용하시길 추천드립니다.
'AIL( Algorithm I Learned)' 카테고리의 다른 글
#AIL_23.11.13 // Programmers_문자열 정수로 바꾸기 (1) 2023.11.13 #AIL_23.11.10 // Programmers_자연수 뒤집어 배열로 만들기 (0) 2023.11.10 #AIL_23.11.07 // Programmers_문자 반복 출력하기 (0) 2023.11.07 #AIL_23.11.03 // Programmers_양꼬치 (1) 2023.11.03 #AIL_23.11.03 // Programmers_배열의 평균 값 (1) 2023.11.03