본문 바로가기
알고리즘 문제

프로그래머스 - 최댓값 만들기(1)

by rinny01 2025. 8. 8.
반응형

 

생각하기

1. numbers 안의 최대값을 구한다.

2. 구한 최대값을 제외한 배열에서 다시 최대값을 구한다.

3. 두수를 곱한 값을 리턴해준다.

function solution(numbers) {
    const max1 = Math.max(...numbers);
    const max2 = numbers.pop(max1);
    return max1;
}

 

바로 오류가 떴다

왜??

.pop()

pop() 메서드는 Array 인스턴스의 메서드로, 배열에서 마지막 요소를 제거하고 그 요소를 반환합니다. 이 메서드는 배열의 길이를 변경합니다.

 

그렇다.. pop 메서드는 내가 원한대로 .pop(max1); 가 실행되지 않는다.

 

그러면 max1을 제거한 배열을 어케 구할까?

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

 

Array.prototype.splice() - JavaScript | MDN

splice() 메서드는 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경합니다.

developer.mozilla.org

 

.splice() 메서드 이용하기

function solution(numbers) {
    const max1 = Math.max(...numbers);
    const index = numbers.indexOf(max1);
    numbers.splice(index,1); //그 위치에서 1개 제거하기
    const max2 = Math.max(...numbers);
    return max1*max2;
}

 

정답 이긴 하다.

 

그런데 다른사람 정답을 보던중 더욱 간단한 방법을 찾았다!

function solution(numbers) {
    numbers.sort((a, b) => b - a); // 내림차순 정렬
    return numbers[0] * numbers[1];
}

 

우선 배열 자체를 내림차순으로 정렬 한후, 0번인덱스(최대값1)와 1번인덱스(최대값2) 를 곱해주면 같은 결과가 나오게 된다..!!

 

반응형
LIST