[프로그래머스] JS - 최댓값 만들기(2)

·2023년 8월 28일
0

코테 풀기

목록 보기
18/26
post-thumbnail

문제

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

제한사항

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

입출력

문제 바로가기

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


✏️관련 개념

나는 numbers의 배열값을 오름차순 정렬하여, 배열의 값이 음수x음수result값이 될 수도 있기 때문에 나열된 배열의 값중 제일 앞 두개의 값과 제일 뒤의 두개의 값을 곱한 값을 비교하는 방식으로 문제를 해결하였다.

근데 충격인 사실 ..
원래 파이썬으로 코테를 준비하다가 자스로 넘어온건데,
자스엔 음수 인덱스가 없다고 한다 ....😇
심지어 sort()도 파이썬의 sort()와는 많이 달라서 헤맸다 ...ㅜ

✔️sort()

js의 sort()는 문자형 오름차순으로 정렬된다. 숫자도 마찬가지로 문자형 오름차순으로 정렬되기 때문에 일반적으로 숫자 정렬을 하려고 sort()만 입력하면 원하는 결과를 얻을 수 없다.

const number = [1, 5, 10, 20, 25, 100];
number.sort();
console.log(number); //[1, 10, 100, 20, 25, 5]

그래서 아래와 같이, 추가로 약간 작성해줘야하는 부분이 존재한다.

const number = [1, 20, 5, 10, 100];

// 오름차순 정렬
number.sort(function(comp1, comp2) {
	return comp1 - comp2; // [1, 5, 10, 20, 100]
});

// 내림차순 정렬
number.sort(function(comp1, comp2) {
	return comp2 - comp1; // [100, 20, 10, 5, 1]
});

✔️음수 인덱스 해결

음수 인덱스가 없다는 부분은, 아래와 같이 해결했다.

numbers[numbers.length - 1]; // 파이썬의 numbers[-1]과 동일
numbers[numbers.length - 2]; // 파이썬의 numbers[-2]과 동일

💡풀이코드

function solution(numbers) {
    var answer = 0;
    numbers = numbers.sort((a,b)=>a-b)
    var a = numbers[0] * numbers[1]
    var b =  numbers[numbers.length - 1] * numbers[numbers.length - 2];
    answer = (a>b) ? a : b
    return answer;
}

이를 Math.max()로 좀 더 간결하게 작성 가능하다.

function solution(numbers) {
    var answer = 0;
    numbers = numbers.sort((a,b)=>a-b)
    var a = numbers[0] * numbers[1]
    var b =  numbers[numbers.length - 1] * numbers[numbers.length - 2];
    return (Math.max(a,b))
}

0개의 댓글