저장을 습관화

프로그래머스 LV.0 중앙값 구하기 본문

코딩 테스트/프로그래머스 - 자바스크립트

프로그래머스 LV.0 중앙값 구하기

ctrs 2023. 6. 8. 23:18

프로그래머스 LV.0 중앙값 구하기

https://school.programmers.co.kr/learn/courses/30/lessons/120811

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제 명

중앙값 구하기


2. 문제 설명

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


3. 제한 사항

array의 길이는 홀수입니다.

0 < array의 길이 < 100

-1,000 < array의 원소 < 1,000


4. 예시

array result
[1, 2, 7, 10, 11] 7
[9, -1, 0] 0


5. 기본 제공 코드

function solution(array) {
    var answer = 0;
    return answer;
}


6. 제출한 내 답

function solution(arr) {
  for (i = 0; i < arr.length; i++) {
    for (l = i + 1; l < arr.length; l++) {
      let tmp;
      if (arr[i] > arr[l]) {
        tmp = arr[i];
        arr[i] = arr[l];
        arr[l] = tmp;
      }
    }
  }
  let x = Math.round(arr.length / 2) - 1;

  return arr[x];
}

 

6-2. VSC에 작성한 내용

function solution(arr) {
  for (i = 0; i < arr.length; i++) {
    for (l = i + 1; l < arr.length; l++) {
      let tmp;
      if (arr[i] > arr[l]) {
        tmp = arr[i];
        arr[i] = arr[l];
        arr[l] = tmp;
      }
    }
  }
  let x = Math.round(arr.length / 2) - 1;

  return arr[x];
}

// 어떻게 할 것인가?

// test
let ar1 = [7, 11, 1, 10, 2];
let ar2 = [9, -1, 0];

console.log(solution(ar1));
console.log(solution(ar2));


7. 특이사항

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ좀 어거지였다

진행 순서가 머릿속에서 잘 안그려져서

노트에 그림 그려가며 적었다

1) 중첩 for문을 준비한다.

바깥 for문의 변수 i는 0부터 1씩 커지며 배열의 갯수만큼 반복한다.

안쪽 for문의 변수 l은 1부터 1씩 커지며 배열의 갯수만큼 반복한다. 

변수 tmp를 준비한다.

 

2) arr[0]과 arr[1]을 비교한다.

arr[0]이 더 크다면 arr[1]의 값을 tmp에 저장하고

arr[1]의 값은 arr[0]이 된다.

arr[0]의 값은 tmp에서 가져온다.

복잡하지만 서로 자리를 바꾸는 개념이다.

 

이걸 arr[0]과 arr[2], arr[0]과 arr[3]... arr[2]와 arr[5]....

배열의 모든값을 서로 비교할때까지 반복한다.

 

이로써 배열이 오름차순으로 정렬되었다.

 

3) 배열의 가운데 값을 구하자

배열의 갯수는 홀수다.

가운데 값을 구하기 위해 갯수에서 2를 나누고 소숫점 반올림한다.

3/2 = 1.5 = > 2

5/2 = 2.5 => 3

7/2 = 3.5 => 4

 

배열은 0부터 시작하니 배열의 가운데 위치를 구하기 위해

다시 1을 뺀다

2-1 = 1

3-1 = 2

4-1 = 3

아차 지금 보니 소숫점 그냥 버렸으면 됐겠다.

 

가운데 위치를 구했으니 

arr[가운데 위치]를 return 한다.

 


8. 다른 사람이 작성한 답

8-1. array.sort 메소드 

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