STUDY/Code TEST
프로그래머스 최댓값 만들기 (2)
doosik
2023. 7. 1. 02:20
[level 0] 최댓값 만들기 (2) - 120862
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
성능 요약
메모리: 33.4 MB, 시간: 0.05 ms
구분
코딩테스트 연습 > 코딩테스트 입문
채점결과ㅁ
Empty
문제 설명
정수 배열 numbers
가 매개변수로 주어집니다. numbers
의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
제한사항
- -10,000 ≤
numbers
의 원소 ≤ 10,000 - 2 ≤
numbers
의 길이 ≤ 100
입출력 예
numbers | result |
---|---|
[1, 2, -3, 4, -5] | 15 |
[0, -31, 24, 10, 1, 9] | 240 |
[10, 20, 30, 5, 5, 20, 5] | 600 |
입출력 예 설명
입출력 예 #1
- 두 수의 곱중 최댓값은 -3 * -5 = 15 입니다.
입출력 예 #2
- 두 수의 곱중 최댓값은 10 * 24 = 240 입니다.
입출력 예 #3
- 두 수의 곱중 최댓값은 20 * 30 = 600 입니다.
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
코딩테스트 연습 | 프로그래머스 스쿨
개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!
school.programmers.co.kr
코드
function solution(numbers) {
let len = numbers.length
numbers.sort(function(a, b) {
return a - b;
})
if(numbers[0] * numbers[1] < (numbers[len-2] * numbers[len-1])){
return (numbers[len-2] * numbers[len-1])
}else
return numbers[0] * numbers[1]
}
다른 사람의 풀이
function solution(numbers) {
numbers.sort((a, b) => a - b);
return Math.max(numbers[0]*numbers[1], numbers[numbers.length-1]*numbers[numbers.length-2]);
}
코드 설명
정수 배열 numbers 원소의 값은 -10,000 과 10,000 범위이기 때문에 음수 2개를 곱했을 때의 값도 파악을 해야한다. 결론적으로 최댓값을 구하기 위해서는 음수 중 가장 낮은 값 2개를 곱한 값과 양수 중 가장 높은 값 2개를 곱한 값만 비교하면 구할 수 있다. 그래서 먼저 sort 메서드로 배열안의 값들을 순서대로 정렬을 한 다음에 정렬한 배열에서 가장 낮은 값의 인덱스 0과 1 가장 높은 값의 인덱스, 배열의 길이-2, -1로 곱한 값들을 비교해주었다.
그리고 다른 사람의 풀이 중 가장 깔끔한 코드를 가져왔다.
기본적으로 풀이 자체는 나랑 같았지만, 화살표 함수와 Math.max 함수를 이용해서 더 깔끔하게 풀어냈다.
같은 풀이이고 같은 값을 도출해내지만 코드 길이는 나의 4분의 1 줄밖에 되지않는다.🥲
이런 메서드 자체를 인지하고 있지만, 알고리즘 풀이에 조건문만 보이면 반사적으로 if문을 쓰고 있는 내가 보인다..
의식적으로 좀 더 다양한 메서드를 쓰는 연습을 계속 해야할것 같다..