[LV0] 최댓값 만들기 (1)
오졌다 이렇게 쉽게 정렬이 가능하다니
프로그래머스 코딩테스트 입문
-최댓값 만들기(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 입니다.
그렇다고 한다
처음 생각했던 아이디어는 "그냥 정렬한 다음 제일 뒤에 두 수만 곱하면 되는거 아님???" 이라서
일단 버블 정렬을 한 다음 곱해보려고 했는데
갑자기 너무 귀찮아서 좀더 쉽게 정렬할 수 있는 방법 없나~~~ 하면서 검색을 해보다가
sort 함수라는 것을 알게 되었다.
이 sort 함수는 그동안 for문을 끄적끄적 써가며 버블 정렬을 구현했던 나에게는 사막의 오아시스요, 빛과 소금이자 나의 삶 나의 비전이었던 것이었던 것이었다.....!
sort()
sort 함수는 말그대로 정렬을 해주는 함수인데, 이게 문자열 기준으로 정렬을 하는지라 숫자도 1로 시작하는 숫자가 가장 앞으로 나오게 되었다. 한마디로 1이 999999999999999보다 크다고 나오는 셈.
그래서 종강 후 오랜만에 치트키 parseInt를 주섬주섬 꺼내 왔다. for문에 배열의 요소들을 넣고 parseInt로 정수화시킨 뒤 다시 돌려봤더니~
테스트 2 | |
입력값 〉 | [0, 31, 24, 10, 1, 9] |
기댓값 〉 | 744 |
실행 결과 〉 | 실행한 결괏값 279이 기댓값 744과 다릅니다. |
여전히 안되는 모양새 쏙독새~~
parseInt로도 안되는 모양이라 다른 방법을 찾던 도중
어어 sort() 함수 안에 익명 함수를 넣는 방법이 있었네!
매개변수로 a,b를 넣고 함수 안에는 오름차순일 경우 a-b, 내림차순일 경우 b-a를 넣어주면 된다
sort(function(a,b){ return a-b }) |
이런 느낌
원리는 a - b > 0 은 a > b 라는 말이고, 이렇게 된다면 a는 b 뒤에 온다는 것이다. 그러면 배열 순서는 b,a가 되겠지? 그럼 큰 수가 뒤에 있으니까 자연스럽게 오름차순이 되겠지? 내림차순은 반대고? 라고 이해했다. 어려워잇!
아무튼 좋은거 배웠다.
function solution(numbers) { var answer = 0; numbers.sort(function(a,b){ return b-a }) answer = numbers[0] * numbers[1] } |
나는 내림차순으로 정렬해서 0번 인덱스와 1번 인덱스를 곱하는 방법을 사용했다 오졌다.