본문 바로가기
Problem Solving/프로그래머스

[프로그래머스 | 파이썬 / 자바스크립트] 최댓값 만들기 (2)(코딩테스트 입문/ level 0)

by 청량리 물냉면 2023. 2. 21.
반응형
문제

https://school.programmers.co.kr/learn/courses/30/lessons/120862?language=python3 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

🐍파이썬
def solution(numbers):
    numbers.sort()
    plus = numbers[-1] * numbers[-2]
    if numbers[0] < 0 and numbers[1] < 0:
        if plus < (numbers[0] * numbers[1]):    
            return numbers[0] * numbers[1]
    return plus

1️⃣ numbers를 정렬한다.

2️⃣ plus 변수에 절댓값이 가장 큰 -1번째 인덱스와 다음으로 절댓값이 큰 수인 -2번째 인덱스 값을 곱하여 대입한다.

3️⃣ 부호가 (-)인 수가 2개 이상 있는지 확인하고, (-)가 한 개나 그 이하라면 plus 값을 그대로 리턴한다. ☞ (-)가 한 개이면 그 수의 절댓값과 관련 없이 어떤 수와 곱해도 (-)가 나오기 때문에 plus가 가장 큰 수이다.

4️⃣ 부호가 (-)인 수가 2개 이상이라면 가장 절댓값이 큰 0번째 인덱스, 1번째 인덱스의 값을 곱하고 그 수를 plus 값과 비교한다. numbers[0] * numbers[1]가 plus보다 더 큰 값이라면 numbers[0] * numbers[1]를 리턴한다.

5️⃣ numbers[0] * numbers[1]가 plus보다 작다면 plus를 리턴한다.

 

 

다른 풀이 방법

def solution(numbers):
    numbers = sorted(numbers)
    return max(numbers[0] * numbers[1], numbers[-1]*numbers[-2])

(-)가 하나라면 어차피 두번째 인수가 더 클테니 부호 갯수를 신경쓸 필요 없이 더 큰 수를 고르면 되었다...😂

 

 

🐥자바스크립트
function solution(numbers) {
    numbers.sort(function(a, b) {
        return a - b;
    });
    return Math.max(numbers[0] * numbers[1], numbers[numbers.length-1] * numbers[numbers.length-2]);
}

위의 파이썬 풀이를 참고해 풀이했다.

 

❗❗ 참고

파이썬과 달리 자바스크립트의 sort()의 기본 정렬 순서는 문자열의 유니코드 코드값이다. 따라서 숫자를 정렬하기 위해서는 위와 같이 sort() 내부에 정렬 기준을 명시하는 함수를 추가해 주어야 한다.

https://tinyurl.com/2ne8c243

 

Array.prototype.sort() - JavaScript | MDN

sort() 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다. 정렬은 stable sort가 아닐 수 있습니다. 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따릅니다.

developer.mozilla.org

 

반응형