[JS] 배열 속 세번째로 큰 숫자 추출 programmers

0

코딩테스트

목록 보기
2/80
post-thumbnail

문제

[-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(...array)의 사용

배열에서 가장 큰 숫자를 추출할 수 있는 가장 빠른 방법은 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

잘 나온다...!
저것보다 더 좋은 방법이 있다면 꼭 알려주세용

profile
일단 해. 그리고 잘 되면 잘 된 거, 잘 못되면 그냥 해본 거!

0개의 댓글