프로그래머스 레벨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
'Web > 알고리즘공부' 카테고리의 다른 글
[JavaScript] 1에서부터 주어진 숫자까지 홀수 구하기 (짝수는 싫어요) (0) | 2022.10.23 |
---|---|
[JavaScript] 배열(Array)에서 최빈값 구하기 (0) | 2022.10.23 |