본문 바로가기

Web/알고리즘공부

[JavaScript] 배열(Array)에서 중앙값 구하기

 

프로그래머스 레벨0 문제를 풀기 시작했다.

day3의 첫 번째 문제까지는 아주 쉽게 지나갔지만 이 문제부터 풀이에 시간이 걸리기 시작했으며 JavaScript에서 지원하는 기능을 사용하거나 for / if / while 등을 활용하여 문제를 풀어야 했다.

 

중앙값 구하기

문제

- 무작위로 입력된 홀수 길이의 배열에서 중앙에 위치한 값을 구한다.
- 정수 배열만 주어진다.
- 배열의 길이는 0 < Array < 100 
- -1,000 < Array < 1,000 사이의 무작위 숫자

 

 

 

문제풀이 방법1

아래 방법은 배열을 크기로 정렬을 해준 뒤 양쪽 끝을 제거해가며 마지막 남은 중앙 값 하나를 남기는 방법으로 코드를 작성했다.

1. 무작위 숫자로 주어진 배열을 크기의 순서대로 정렬한다.
2. 배열의 길이를 계산하여 길이가 1이 아닐 시 맨 앞과 맨 뒤의 배열을 삭제한다.
3. 길이가 1이 될 때까지 반복한다.
4. 길이가 1일 경우, 배열의 0번째 값을 답으로 반환하며 반복을 끝낸다.
function solution(array) {
  let answer = 0;
  
  let arr1 = [...array]; // array와 똑같은 값을 arr1에 복제한다.
  arr1 = arr1.sort((a, b) => a - b); // sort를 사용하여 오름차순으로 정렬한다.

  for (i = 100; i > arr1.length; i--) {
    if (arr1.length > 1) { // arr1의 길이가 1보다 클 경우 처음과 끝의 배열을 잘라낸다.
      arr1.splice(0, 1);
      arr1.splice(-1, 1);
    } else { // arr1의 길이가 1에 도달했을 경우 answer에 값을 넣어주며 반복을 끝낸다.
      answer = arr1[0];
      break;
    }
  }
  return answer;
}

 

 

 

 

문제풀이 방법2

아래 방법은 위의 방법을 작성하다보니 문득 이런 생각이 들었다.

길이가 세 개인 배열이라면 들어온 숫자가 무엇이든 정렬 후 두 번째에 위치한 값이 중앙값이며

다섯 개의 배열이라면 세 번째에 위치한 값이 중앙값이다.

그리고 일곱 개라면 네 번째 위치한 값이다.

 

중앙 길이의 값을 구하는 것이니 길이에서 2를 나눠보았다. 

3 / 2 = 1

배열은 0부터 시작하므로 3개 길이 배열의 중앙인 1이 나왔다.

5 / 2 = 2

5개 길이의 중앙에 위치한 길이값인 2와 동일하다.

 

1. 무작위 숫자로 주어진 배열을 크기의 순서대로 정렬한다.
2. 배열의 길이에서 2를 나누어 나온 위치의 값을 반환한다.
function solution(array) {
    let answer = 0;
    let sortnum = [...array]; // sortnum에 array를 복제한다.
    sortnum = sortnum.sort((a,b)=>a-b); // sort를 사용하여 오름차순 정렬을 한다.
    answer = sortnum[parseInt(sortnum.length / 2)]; // answer에 배열의 길이 / 2에 위치한 값을 정수형으로 넣어준다.
    
    return answer;
}

 

728x90