Algorithm

[CodeKata] 프로그래머스 : 3.11(목), 최대값과 최소값 & 최소값 만들기

ttaeng_99 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]}`
}
  1. sortS는 s를 배열로 split() 한 뒤, 오름차순으로 정렬한 형태이다. 정렬을 위해, Number로 변환하는 과정이 필요하다.
  2. 최소값(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;
}
  1. answer는 반환할 정답이자, 요소들의 곱을 누적할 변수이다.
  2. A는 오름차순, B는 내림차순으로 sort() 한다. (A sort() 시, 콜백함수가 없다면 크기순서가 아닌 [1, 1000, 2, 34] 패턴으로 정렬됨)
  3. A, B는 길이가 같기에 둘 중 하나의 길이만큼 각 인덱스 요소들을 곱해서 answer에 더해주면 된다. 이를 최종 반환한다.

🖇 리뷰

두 문제다 많은 사람이 풀었고, 어려움이 없는 문제였다.

'최소값 만들기' 는 효율성 테스트가 있어, 모든 경우의 수를 탐색하는 것보다 최소값을 도출하는 설계에 대해 우선적으로 고민한 것이다.

 

 

반응형