-
[CodeKata] 프로그래머스 : 3.11(목), 최대값과 최소값 & 최소값 만들기Algorithm 2021. 3. 11. 14:04반응형
🥋 Ooooth!! (Level 2)
🧮 풀이
function solution(s) { const sortS = s.split(" ").map(e => Number(e)).sort(((a,b) => a-b)) return `${sortS[0]} ${sortS[sortS.length-1]}` }
- sortS는 s를 배열로 split() 한 뒤, 오름차순으로 정렬한 형태이다. 정렬을 위해, Number로 변환하는 과정이 필요하다.
- 최소값(0번 인덱스), 최대값(마지막 인덱스) 을 Templates Literal 문자열로 반환했다.
🥋 Ooooth!! (Level 2)
🧮 풀이
A, B 배열 요소들 곱의 누적합이 최소가 되려면, 모든 곱의 경우에서 최소값을 도출해야 한다고 생각했다.
가령, B에서 가장 큰 값인 1000이 나왔다고 가정하자. 그러면, A는 0이면 좋겠고, 아니더라고 최소값과 곱하는게 바람직하다.
즉, A는 작은순으로, B는 반대로 큰 순으로 각 요소들을 곱해주면 된다고 생각했다.
function solution(A,B){ let answer = 0; A = A.sort((a,b) => a - b); B = B.sort((a,b) => b - a) for (let i = 0 ; i < A.length ; i++) { answer += A[i] * B[i]; } return answer; }
- answer는 반환할 정답이자, 요소들의 곱을 누적할 변수이다.
- A는 오름차순, B는 내림차순으로 sort() 한다. (A sort() 시, 콜백함수가 없다면 크기순서가 아닌 [1, 1000, 2, 34] 패턴으로 정렬됨)
- A, B는 길이가 같기에 둘 중 하나의 길이만큼 각 인덱스 요소들을 곱해서 answer에 더해주면 된다. 이를 최종 반환한다.
🖇 리뷰
두 문제다 많은 사람이 풀었고, 어려움이 없는 문제였다.
'최소값 만들기' 는 효율성 테스트가 있어, 모든 경우의 수를 탐색하는 것보다 최소값을 도출하는 설계에 대해 우선적으로 고민한 것이다.
반응형'Algorithm' 카테고리의 다른 글
[CodeKata] 프로그래머스 : 3.17(수), 짝지어 제거하기 (0) 2021.03.17 [CodeKata] 프로그래머스 : 3.13(토), 피보나치 수 & 행렬의 곱셈 (0) 2021.03.13 [CodeKata] 프로그래머스 : 3.10(수), 이진 변환 반복하기 (0) 2021.03.10 [CodeKata] 프로그래머스 : 3.9(화), 숫자의 표현 (0) 2021.03.09 [CodeKata] 프로그래머스 : 3.8(월), 방문 길이 (0) 2021.03.08