2022/12/23
- (Lv. 0) 나머지 구하기
- (Lv. 0) 중앙값 구하기
- (Lv. 0) 최빈값 구하기 ✨
- (Lv. 0) 짝수는 싫어요
중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.
✨
sort
해도 원래 배열이 바뀌지 않는다 ... (파이썬과 헷갈리지 말자 ...)
-> 새로운 배열 선언 or ...
✨ array.sort((a,b) => a-b); // 오름차순
✨ array.sort((a,b) => b-a); // 내림차순
function solution(array) {
array.sort((a,b) => a-b);
return array[parseInt(array.length/2)];
}
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
✨ 배열 관련 메소드의 중요성 ... (안 쓰면 노가다)
✨
forEach
: 주어진 함수를 배열 요소 각각에 대해 실행const array1 = ['a', 'b', 'c']; array1.forEach(element => console.log(element)); // expected output: "a" // expected output: "b" // expected output: "c"
✨
...
(Spread Operation)let array = [1, 2, 3, 3, 3, 4]; console.log(...array) // 출력: 1 2 3 3 3 4 console.log(Math.max(...array)) // 출력: 4
✨
Set
: 객체로 변환 -> 중복 제거시 사용❗️const arr = [1, 2, 3, 4, 5, 2] const set = new Set(arr) console.log(set); // 출력: {1,2,3,4,5}
✨
Map
: 키가 있는 데이터를 저장한다는 점에서 객체와 유사
➕ 키에 다양한 자료형을 허용
new Map()
: 맵 만들기map.set(key, value)
: key를 이용해 value를 저장map.get(key)
: key에 해당하는 값을 반환. key가 존재하지 않으면 undefined를 반환.map.has(key)
– key가 존재하면 true, 존재하지 않으면 false를 반환.map.delete(key)
– key에 해당하는 값을 삭제map.clear()
– 맵 안의 모든 요소를 제거map.size
– 요소의 개수를 반환let map = new Map(); map.set('1', 'str1'); // 문자형 키 map.set(1, 'num1'); // 숫자형 키 map.set(true, 'bool1'); // 불린형 키 // 객체: 키를 문자형으로 변환 // 맵: 키의 타입을 변환시키지 않고 그대로 유지 console.log( map.get(1) ); // 'num1' console.log( map.get('1') ); // 'str1' console.log( map.size ); // 3
✨
Array.from()
: 유사 배열 객체를 배열로 바꾸는데 사용console.log(Array.from('foo')); // 출력: Array ["f", "o", "o"] console.log(Array.from([1, 2, 3], x => x + x)); // 출력: Array [2, 4, 6]
➕) 새로운 배열 생성할 때도 사용
const arr = Array.from({length: 5}, () => 0); console.log(arr); // Array(5) [0, 0, 0, 0, 0]
✨
Array.indexOf()
: 배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환하고, 존재하지 않으면 -1을 반환const beasts = ['ant', 'bison', 'camel', 'duck', 'bison']; console.log(beasts.indexOf('bison')); // 출력: 1 console.log(beasts.indexOf('bison', 2)); //인덱스 2에서 시작 (출력: 4) console.log(beasts.indexOf('giraffe')); // 출력: -1
function solution(array) {
array.sort((a,b) => a-b); //정렬
var count = 0; //중복 횟수
var modCnt = 0; //최빈값 중복 횟수
var before = -1; //이전 값
var mod = -1; //최빈값
var isDup = false; //최빈값 중복 여부
for(let i=0; i<array.length; i++) {
if(before !== array[i]) //이전 숫자와 다르면
count = 1; //count 1
else //이전 숫자와 같으면
count += 1; //count 증가
//현재 반복 횟수와 최빈값 반복 횟수가 같을 때
if(count === modCnt) {
if(mod !== array[i]) //최빈값과 현재값이 다르면
isDup = true; //최빈값 중복
}
//현재 반복 횟수가 최빈값 반복 횟수보다 크면
if(count>modCnt) {
modCnt = count; //최빈값 반복 횟수 업데이트
mod = array[i]; //최빈값을 현재 값으로 업데이트
isDup = false; //최빈값 하나
}
before = array[i]; //이전 값 업데이트
}
if(isDup) //최빈값이 여러개면
return -1;
return mod;
}
function solution(array) {
let map = new Map();
// Map 객체 초기화
for(let i = 0; i <= Math.max(...array); i++){
map.set(i, 0);
}
console.log(map)
// array 배열의 원소값과 일치하는 Map 객체의 key를 증가시킨다
for(let i = 0; i < array.length; i++){
map.set(array[i], map.get(array[i]) + 1);
}
console.log(map)
// Map 객체의 value만 모아서 배열로 만든다
let arr = Array.from(map.values());
// 최대값 산출
let max = Math.max(...arr);
// 최대값이 하나만 있다면 max, 여러 개 중복된다면 -1 출력
if(arr.indexOf(max) !== arr.lastIndexOf(max)){
return -1;
} else {
return arr.indexOf(max);
}
}
배열 메서드를 익히는 것도 중요하지만 기본적인 사고도 중요하다