[Programmers] Lv.0 중앙값 구하기 (Javascript)
Lv.0 중앙값 구하기
문제 설명
중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다.
예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때,
중앙값을 return 하도록 solution 함수를 완성해보세요.
제한사항
- array의 길이는 홀수입니다.
- 0 < array의 길이 < 100
- -1,000 < array의 원소 < 1,000
오늘 갑자기 삘받아서 또 풀었다
이게 머리가 안돌아가는 날에는 쉬워보이는 문제라도 손을 못대겠던데
오늘 사탕을 너무 많이 먹엇ㅅ더니 도핑됐나보다
나의 풀이
function solution(array) {
var arr = array.sort((a,b)=>a-b)
if(arr.length%2 == 1){
return arr[(0+arr.length-1)/2]
}
}
사고 과정
1차 체크
1. 크기의 순서대로 정렬한다. (아 .sort() 쓰겠군요)
2. 가장 중앙에 위치하는 값이다.
입력 데이터 타입 : array
출력 데이터 타입 : number
2차 체크
배열의 경우를 나누자
배열의 수가 홀수일 때 : 배열의 가운데 값
배열의 수가 짝수일 때 : 제한사항에 'array의 길이는 홀수입니다' 래서 제외했음
인덱스 번호를 한번 생각
01234
012
..
나는 양 끝 값을 더한다음에 나누기 2 하면
중앙에 있는 수가 나온다는것을 이용할거임
중앙 요소의 인덱스를 출력하면 됨
처음에 그냥 sort() 라고만 썼다가 그것때문에 자꾸 틀렸었는데
확인해보니까 배열의 길이가 5까지는 제대로 되는데 7개이상부터 이상하게 맨 끝 인덱스의 요소가 걸려서
고민하다가 sort를 확인해봄
단순하게 '아 sort가 정렬해주는거고 기본이 오름차순이니까 그냥 빈 함수로 쓰면 되겠지' 했었는데
sort에 대한 개념 부족을 체감함....
.sort()
배열 고차 함수중 하나고
배열의 요소를 정렬하는 메서드.
원본 배열을 직접 변경하며 정렬된 배열을 반환함
기본적으로 오름차순으로 요소를 정렬한다.
내림차순으로 정렬하고 싶다면
먼저 .sort()를 사용해서 오름차순으로 정렬 후
.reverse()를 이용해서 내림차순으로 변경해주면 된다.
문자열 요소로 이루어진 배열의 정렬은 아무런 문제가 없으나,
숫자 요소로 이루어진 배열을 정렬할 때는 주의가 필요하다고 함
sort 메소드의 기본 정렬 순서는 유니코드 코드 포인트의 순서를 따르기 때문에
배열의 요소가 number 타입이더라도 일시적으로 string으로 변환 후 유니코드 순서를 기준으로 정렬한다고 함
따라서 number타입을 정렬할 때는 비교함수를 인수로 전달해야 함
양수,음수,0중에 하나로 반환하면 됨
비교함수의 반환값이 0보다 작은 경우 첫번째 인수를 우선 정렬 (음수)
0이면 정렬하지 x (0)
0보다 크면 두번째 인수를 우선 정렬 (양수)
.sort(function(a, b){return a - b}) //오름차순 정렬(첫번째 인수인 a우선)
.sort(function(a, b){return b - a}) //내림차순 정렬(첫번째 인수인 b우선)
그래서 나는
.sort(function(a, b){return a - b})을
arrow function을 써서 적어주었음
.sort((a,b) => a-b)
내림차순이면 return 부분만 b-a로 적어주면 됨
항상 개념을 확실히 하자
+Github 업로드 추가
GitHub - Yeonji-Noob/Problem-Solving: 다양한 코딩 문제 풀기
다양한 코딩 문제 풀기 . Contribute to Yeonji-Noob/Problem-Solving development by creating an account on GitHub.
github.com