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

백승연·2023년 12월 13일
0

프로그래머스 - Lv. 0

목록 보기
16/60
post-thumbnail

🗒️ 문제

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


제한 사항

  • array의 길이는 홀수입니다.
  • 0 < array의 길이 < 100
  • -1,000 < array의 원소 < 1,000

입출력 예

arrayresult
[1, 2, 7, 10, 11]7
[9, -1, 0]0

입출력 예 설명

입출력 예 #1

  • 본문과 동일합니다.

입출력 예 #2

  • 9, -1, 0을 오름차순 정렬하면 -1, 0, 9이고 가장 중앙에 위치하는 값은 0입니다.

🖋️ 나의 풀이

간단할줄 알았는데 진심 이거 푸느라 너무 힘들었다ㅜ
sort()를 사용해서 오름차순으로 정렬한 다음 배열 길이를 구한 다음 가운데에 위치한 인덱스를 구하는 방법으로 시도했었는데 잘 안됨...

처음에는 sort()하고 for문을 돌려서 배열의 길이를 알아내려 했는데 length라는 것을 알게 되어서 for문을 지우고 .length를 이용하여 배열의 길이를 구했다.

function solution(array) {
    let length = array.sort().length;
    return array[parseInt(length/2)];
    // return array[Math.floor(length/2)]
}

근데 이렇게 푸니까 예제는 성공했는데 채점을 하니까 실패했다고 나옴;;
성공률이 44.4%정도였나...
그래서 찾다찾다 모르겠어서 그냥 결과를 봤는데 새로운 사실을 알게 되었다

그건 바로 숫자 배열일 때 sort()사용 시 아래와 같이 sort((a, b) => a - b);라고 작성해 주어야 제대로 sort()가 된다는 것이었다... 진짜 처음 안 사실

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

💡 다른 사람들의 풀이

# 1

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



📝 모르는 내용 찾아보기

parseInt와 floor

문제를 풀다가 parseIntfloor의 차이를 정리하고싶어짐
나는 정수 -> 실수 문제가 나오면 거의 Math.floor()을 사용했기 때문에 parseInt는 무엇인지 정확하게 몰랐다.

1. parseInt와 floor의 공통점

먼저 parseIntfloor는 양수일 경우 둘 다 내림 한 결과값이 나온다.

let a = Math.floor("12.34"); // 12
let b = Math.floor("56.78"); // 56

let c = parseInt("12.34"); // 12
let d = parseInt("56.78");  // 56

2. parseInt와 floor의 차이점

parseIntfloor의 차이점은 음수에서 나타난다.

let a = Math.floor("-12.34"); // -13
let b = Math.floor("-56.78"); // -57

let c = parseInt("-12.34"); // -12
let d = parseInt("-56.78");  // -56
let e = parseInt("12 asd"); // 1
let f = parseInt("asd 12"); // NaN

parseInt는 소수점을 버리고 Math.floor는 소수점을 내린다.

3. 정리

  • parseInt
    • 문자열을 정수로 반환
    • 문자로 시작하면 NaN, 숫자로 시작하면 앞의 숫자만 반환
  • Math.floor
    • 주어진 숫자보다 작거나 같은 가장 큰 정수를 반환. 항상 내림

sort()

sort()는 오름차순으로 정렬한 후 반환해주는 함수이다.
유니코드 기준으로 sort된다.

// MDN 예시
const months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort();
console.log(months);
// Expected output: Array ["Dec", "Feb", "Jan", "March"]

const array1 = [1, 30, 4, 21, 100000];
array1.sort();
console.log(array1);
// Expected output: Array [1, 100000, 21, 30, 4]

1. 숫자 배열일 때

sort()이용 시 배열이 문자가 아닌 숫자 배열일 경우엔 조심해야 한다.

const array1 = [1, 30, 4, 21, 100000];
array1.sort();
console.log(array1);
// Expected output: Array [1, 100000, 21, 30, 4]

위에서 작성한 내용처럼 유니코드 기준으로 sort되기 때문에 숫자 배열일 경우 [1, 4, 21, 30, 100000] 으로 정렬되는 것이 아니라 [1, 100000, 21, 30, 4]과 같은 순서로 정렬되기 때문에 사용 시 주의해야 한다.

2. 그렇다면 어떻게 오름차순으로 정렬할 수 있을까?

기본 sort()가 아닌 아래처럼 사용하면 오름차순으로 정렬이 가능하다.

Array.sort((a, b) => a - b)
profile
공부하는 벨로그

0개의 댓글