[-1, 1, 10, 5, 9]
[12, 1, 5, 5, -2, 3]
주어진 두개의 배열이 있습니다.
각 배열에서 세번째로 큰 숫자를 추출해 보세요.
중복된 숫자는 제외 시켜야 합니다.
5
3
위와 같은 결과가 출력되어야합니다.
function findThirdMaxNum(numArray){
let newArray = [];
numArray.forEach((element) => {
if (!newArray.includes(element)) {
newArray.push(element);
}
});
return newArray;
}
forEach를 사용해서 numArray의 값을 newArray로 넣어준다.
만약 newArray에 이미 넣어준 숫자(중복)가 있다면 넣지 않는다.
[-1, 1, 10, 5, 9]
[12, 1, 5, -2, 3]
중복을 제거한 새 배열 newArray를 찍어보니, 중복 제거가 잘 된것을 확인할 수 있었다.
그럼 이제 newArray를 가지고 세번째 숫자를 구하면 된다.
배열에서 가장 큰 숫자를 추출할 수 있는 가장 빠른 방법은 Math.max를 사용하는 것이다.
최소 값도 구할 수 있는데, 그 때는 Math.min을 사용하면 된다.
하지만 문제는 세번째를 구해야한다는 것...
나름 곰곰히 생각해 보았다.
for문을 사용해서 세번째 최대값이 나올 때 까지 최대값을 하나씩 삭제해주면 되지 않을까?
바로 해보자
function findThirdMaxNum(numArray){
let newArray = [];
numArray.forEach((element) => {
if (!newArray.includes(element)) {
newArray.push(element);
}
});
// 반복문을 2번까지만 돌린다 (두번째 큰 숫자값 까지만 지워야하니까)
for(let i = 0; i < 2; i++){
// 새 배열에서 가장 큰 숫자의 index를 구한다.
let maxNum = newArray.indexOf(Math.max(...newArray));
// 해당 splice를 이용해서 가장 큰 숫자값의 index를 빼준다
newArray.splice(maxNum, 1);
}
return Math.max(...newArray)
}
console.log(findThirdMaxNum([-1, 1, 10, 5, 9]));
console.log(findThirdMaxNum([12, 1, 5, 5, -2, 3]));
5
3
잘 나온다...!
저것보다 더 좋은 방법이 있다면 꼭 알려주세용