[프로그래머스-자바스크립트] 최댓값 만들기 (1)

호박이와 칼림바·2023년 9월 12일

프로그래머스) Level0

목록 보기
12/25
post-thumbnail

코딩테스트 입문 - 최댓값 만들기 (1) 문제


📢 문제 설명

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.


⚠️ 제한사항

  • 0 ≤ numbers의 원소 ≤ 10,000
  • 2 ≤ numbers의 길이 ≤ 100

🔶 입출력 예

numbersresult
[1, 2, 3, 4, 5]20
[0, 31, 24, 10, 1, 9]744

🔸입출력 예 설명

입출력 예 #1
두 수의 곱중 최댓값은 4 * 5 = 20 입니다.

입출력 예 #1
두 수의 곱중 최댓값은 31 * 24 = 744 입니다.


💎 나의 풀이(splice 함수)


function solution(numbers) {
    let answer, index = 0;
    let max1 = Math.max(...numbers); // numbers 배열에서 가장 큰 수
    for(let i = 0; i < numbers.length; i++)
        if(numbers[i] === max1) index = i; // numbers 배열에서 가장 큰 수의 인덱스 
    
    Math.max(numbers.splice(index, 1)) // 인덱스에 해당하는 값을 삭제한 배열에서 가장 큰 수
    answer =  max1 * Math.max(...numbers);
    return answer;
}

나는 왜 JS가 내장함수인 sort()가 없다 생각했을까.😦
순간 다른 언어와 헷갈린 거 같다. 그래서 sort()는 생각만 하고 이 문제에서 활용하지 못 했는데.
처음 배열에서 가장 큰 수(max1)와 그 수(max1)를 삭제한 배열에서의 가장 큰 수를 곱하는 방식으로 코드를 짰다.

splice()와 slice()의 차이점을 알아두는 게 좋을 거 같다.
-원본 배열을 변경하느냐 안 하느냐의 차이
https://velog.io/@gagaeun/JavaScript-slice-splice-split-%EC%B0%A8%EC%9D%B4


💡 다른 사람의 풀이(sort, reduce 함수)

function solution(numbers) {
    return numbers.sort((a,b)=>b-a).slice(0,2).reduce((a,b)=>a*b);
}

sort()함수의 오름차순numbers.sort((a,b)=>a-b)
내림차순은 위의 코드와 같이 numbers.sort((a,b)=>b-a)

slice() 함수로 0번째와 1번째 요소까지 자르고 이 두 개의 값을 reduce() 함수로 응축한다.
👉0번째 요소와 1번째 요소를 곱한다.

slice와 reduce를 사용하지 않은 코드가 더 간단할 수도 있다.
아래와 같이.

function solution(numbers) {
    let [a, b] = numbers.sort((a,b) => b - a);
    return a * b;
}
profile
프론트엔드 개발자입니다.

0개의 댓글