[코딩테스트] 함수 정리 (2) - reduce, 오름차순 정렬

YJMINT·2023년 7월 13일
1

코딩테스트

목록 보기
3/6

◽️ 계기

오늘도 어김없이 코테 1문제를 풀었다. 이번에 푼 문제는 2309번 : 일곱 난쟁이 였다. 나는 9명의 난쟁이 중 7명의 키의 합이 100이라는 것에 초점을 맞췄고, 9명의 난쟁이 배열에서 7명을 무작위로 추출하여 키의 합이 100이 되는 난쟁이를 찾고 있었다. 이는 메모리 초과가 발생했다.....ㅋㅎ

그래서 다른 사람의 2309번 풀이 블로그를 봤다. 그랬더니 웬걸 이 사람은 역으로 생각해서 '난쟁이 키의 총합 - 100 = 가짜 난쟁이의 키 합'이라는 사실을 이용해서 풀고 있더라. 대단해.... 나도 앞으로는 좀 더 편한 풀이를 생각해봐야겠다.

reduce()

  • 배열의 각 요소를 순회하며 callback함수의 실행 값을 누적하여 하나의 결과값을 반환
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((accumulator, currentNumber) => accumulator + currentNumber);
console.log('sum =', sum); //15

splice()

  • 배열의 기존 요소를 삭제하거나 교체하여 배열의 내용을 변경하며, 제거된 요소가 담긴 별도의 배열을 새로 반환
let months = ["Jan", "Feb", "Sunday", "Monday"];
let days = months.splice(2); // 인덱스 2부터 배열 변경
console.log(days); // ["Sunday", "Monday"]
  • 인덱스 2번부터 1개의 요소만 변경할 수도 있다.
let months = ["Jan", "Feb", "Sunday", "Monday"];
let days = months.splice(2, 1);

console.log(months); // ["Jan", "Feb", "Monday"]
console.log(days); // ["Sunday"]

숫자 배열 중복없이 무작위 추출 ( splice(), random() 사용 )

const heights = [20, 34, 8, 19, 48]

for (let i = 0; i < 2; i++) {
         let moveheight = input.splice([Math.floor(Math.random() * input.length)], 1)[0];
         height.push(moveheight);
    } // 20, 8 | 34 19 | 20 48 등등

오름차순 정렬 ( sort(), map() 이용 )

  • sort는 앞자리 숫자부터 비교해서 오름차순으로 정렬해준다.
const arr = input.sort();
//1, 10, 24, 35, 4, 5, 81
  • 1의 자리 숫자부터 비교해서 오름차순으로 정렬하려면 다음처럼 써야한다.
const arr = input.map(index).sort((a, b) => a - b);
// 1, 4, 5, 10, 24, 35, 81

📚 참고문헌

splice 참고 블로그

profile
YJMINT's develog

0개의 댓글