⌨️ 프로그래머스

[프로그래머스] 중앙값 구하기

하나둘세현 2024. 2. 14. 01:33
728x90

문제

중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.

해결 과정

1. 배열이 임의로 주어질 수 있으니 정렬을 먼저한다.

자바스크립트의 함수 기능 중 .sort()를 통해서 정렬할 수 있으나 아직 입문 단계이기에 다른 방법으로 해결해보려 한다.

그렇다면 정렬을 하기 위해서 어떻게 해야할까?

 

1.1. 배열 중에서 최소 값을 찾는다.

 let minNum = 1000;
 let cnt = 0;
 while() {
        cnt = cnt + 1;
    }
    
 // 배열의 순서를 증가 시키기 위해 반복문을 활용한다.
   let cnt = 0;
    while(cnt < array.length)) {
            if(minNum < array[cnt]) {
        minNum = array[cnt];
    }
       
        cnt = cnt + 1;
    }

 

1.2. 찾은 최소 값을 새배열에 넣기

minNum이 최소값이다. 이제 최소값을 찾았으면 새 배열에 넣어야 한다. 

let newArray = [];

 

function solution(array) {
    var answer = 0;
    let minNum = 1000;
    let cnt = 0;
    
    let newArray = [];
    while(cnt < array.length)) {
            if(minNum < array[cnt]) {
        minNum = array[cnt];
    }  
        cnt = cnt + 1;
    }
    
    newArray.push(minNum);
    
    return answer;
}

새배열에 넣기 위해서는 어떻게 해야할까? .push를 활용한다.

 

1.3. 새배열에 넣은 값을 원래 배열에서 삭제

 

원래 배열에서 삭제를 하기 위해 minNum === array[cnt]가 같게 해줬다.  그리고 let cnt2를 큰 값을 넣어 기존 값과 중복되지 않도록 했다.

  let cnt2 = 0;
    while(cnt<array.length) {
        if(minNum === array[cnt2]) {
            array[cnt] = 1000;
            break;
        }
    }

 

1.4. 1

let arrayCnt = 0;
    while(arrayCnt < array.length) {
        arrayCnt = array+1;
    }

 

원래의 길이만큼 반복하는 코드이다.

반복하기 위해서 위의 코드로 전체 코드를 감싼다.

array[9, -1, 0]
function solution(array) {
    var answer = 0;

    let cnt = 0;
    
    let newArray = [];
     let arrayCnt = 0;
    while(arrayCnt < array.length) {
        let minNum = 1000;
    while(cnt < array.length)) {
            if(minNum < array[cnt]) {
        minNum = array[cnt];
    }  
        cnt = cnt + 1;
    }
    
    newArray.push(minNum);
    
    let cnt2 = 0;
    while(cnt<array.length) {
        if(minNum === array[cnt2]) {
            array[cnt] = 1000;
            break;
        }
    }
    
  
    arrayCnt = arrayCnt + 1;
}

    return answer;
}

 

2. 정렬한 값을 통해서 중앙값을 구해야한다.

 return newArray[Math.floor(array.length / 2)];

 

참고 사이트

https://youtu.be/wnl3UyLecnc?si=brEzalhOY62sFZBP

새롭게 알게된 점📝

function solution(array) {
  return array.sort((a, b) => a - b)[Math.floor(array.length / 2)];
}

 

array.sort(a,b) => a - b 오름 차순으로 정렬한다음

math.floor함수를 이용해 쉽게 해결할 수 있다.

정답

function solution(array) {
  var answer = 0;

  let newArray = [];
  let arrayCnt = 0;

  while (arrayCnt < array.length) {
    let minNum = 1000;

    let cnt = 0;

    while (cnt < array.length) {
      if (minNum < array[cnt]) {
        minNum = array[cnt];
      }
      cnt = cnt + 1;
    }

    newArray.push(minNum);

    let cnt2 = 0;
    while (cnt < array.length) {
      if (minNum === array[cnt2]) {
        array[cnt] = 1000;
        break;
      }
      cnt2 = cnt2 + 1;
    }

    arrayCnt = arrayCnt + 1;
  }
  console.log("newArray: ", newArray);
  return newArray[Math.floor(array.length / 2)];
}

 

 

728x90

'⌨️ 프로그래머스' 카테고리의 다른 글

[프로그래머스] 배열 원소의 길이 | JS  (0) 2024.08.07