🟣 였늘의 문제 회고

κΉ€νƒœμš±Β·2023λ…„ 4μ›” 7일
0
post-thumbnail

🀫 였늘의 문제 ν•₯짝 #1

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] Lv2: μ΅œμ†Ÿκ°’ λ§Œλ“€κΈ°

문제 μ„€λͺ…
길이가 같은 λ°°μ—΄ A, B λ‘κ°œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 각 배열은 μžμ—°μˆ˜λ‘œ 이루어져 μžˆμŠ΅λ‹ˆλ‹€.
λ°°μ—΄ A, Bμ—μ„œ 각각 ν•œ 개의 숫자λ₯Ό 뽑아 두 수λ₯Ό κ³±ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 과정을 λ°°μ—΄μ˜ 길이만큼 λ°˜λ³΅ν•˜λ©°, 두 수λ₯Ό κ³±ν•œ 값을 λˆ„μ ν•˜μ—¬ λ”ν•©λ‹ˆλ‹€. μ΄λ•Œ μ΅œμ’…μ μœΌλ‘œ λˆ„μ λœ 값이 μ΅œμ†Œκ°€ λ˜λ„λ‘ λ§Œλ“œλŠ” 것이 λͺ©ν‘œμž…λ‹ˆλ‹€. (단, 각 λ°°μ—΄μ—μ„œ k번째 숫자λ₯Ό λ½‘μ•˜λ‹€λ©΄ λ‹€μŒμ— k번째 μˆ«μžλŠ” λ‹€μ‹œ 뽑을 수 μ—†μŠ΅λ‹ˆλ‹€.)
예λ₯Ό λ“€μ–΄ A = [1, 4, 2] , B = [5, 4, 4] 라면

Aμ—μ„œ 첫번째 숫자인 1, Bμ—μ„œ 첫번째 숫자인 5λ₯Ό 뽑아 κ³±ν•˜μ—¬ λ”ν•©λ‹ˆλ‹€. (λˆ„μ λœ κ°’ : 0 + 5(1x5) = 5)
Aμ—μ„œ λ‘λ²ˆμ§Έ 숫자인 4, Bμ—μ„œ μ„Έλ²ˆμ§Έ 숫자인 4λ₯Ό 뽑아 κ³±ν•˜μ—¬ λ”ν•©λ‹ˆλ‹€. (λˆ„μ λœ κ°’ : 5 + 16(4x4) = 21)
Aμ—μ„œ μ„Έλ²ˆμ§Έ 숫자인 2, Bμ—μ„œ λ‘λ²ˆμ§Έ 숫자인 4λ₯Ό 뽑아 κ³±ν•˜μ—¬ λ”ν•©λ‹ˆλ‹€. (λˆ„μ λœ κ°’ : 21 + 8(2x4) = 29)
즉, 이 κ²½μš°κ°€ μ΅œμ†Œκ°€ λ˜λ―€λ‘œ 29λ₯Ό return ν•©λ‹ˆλ‹€.

λ°°μ—΄ A, Bκ°€ μ£Όμ–΄μ§ˆ λ•Œ μ΅œμ’…μ μœΌλ‘œ λˆ„μ λœ μ΅œμ†Ÿκ°’μ„ return ν•˜λŠ” solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄ μ£Όμ„Έμš”.

μ œν•œμ‚¬ν•­

  • λ°°μ—΄ A, B의 크기 : 1,000 μ΄ν•˜μ˜ μžμ—°μˆ˜
  • λ°°μ—΄ A, B의 μ›μ†Œμ˜ 크기 : 1,000 μ΄ν•˜μ˜ μžμ—°μˆ˜

μž…μΆœλ ₯ 예

abanswer
[1, 4, 2][5, 4, 4]29
[1,2][3,4]10

λ‚˜μ˜ 풀이

function solution(a, b) {
  a.sort((a, b) => a - b);
  b.sort((a, b) => b - a);

  return a.reduce((a, c, i) => a + c * b[i], 0);
}

κ΅¬ν˜„ μ ‘κ·Ό
1. 두 배열에 λˆ„μ λœ μ΅œμ†Ÿκ°’μ„ κ΅¬ν•˜κΈ° μœ„ν•΄μ„  κ°€μž₯ μž‘μ€ κ°’ * κ°€μž₯ 큰 κ°’ 순으둜 λ‚˜μ—΄ν•˜μ—¬ λˆ„μ ν•˜λ©΄ λœλ‹€.
2. 그러기 μœ„ν•΄μ„  sortλ₯Ό μ΄μš©ν•˜μ—¬ 각 배열을 였λ₯΄, λ‚΄λ¦Ό 차순으둜 μ •λ ¬
3. reducdeλ₯Ό 톡해 인자λ₯Ό 받아와 ν˜„μž¬μ˜ μž‘μ€ κ°’κ³Ό bλ°°μ—΄μ˜ κ°€μž₯ 큰값을 κ³±ν•΄μ„œ λˆ„μ‚° ν•΄κ°€λŠ” 방식.

문제점
1. 두 배열을 각각 κ³±ν•˜μ—¬ λˆ„μ λœ 값이 μ΅œμ†Ÿκ°’μ΄ 되렀면 κ°€μž₯ μž‘μ€ κ°’ * κ°€μž₯ 큰 값을 ν•˜μ—¬ λ”ν•΄μ€˜μ•Ό ν•œλ‹€λŠ” 사싀.
2. map을 ν†΅ν•˜μ—¬ 문제λ₯Ό κ΅¬ν˜„ν•΄λ³΄λ € ν–ˆλŠ”λ° μ‹€νŒ¨ν•œ 사싀..
3. λ­”κ°€ 생각을 더 많이 μ•ˆ ν•˜λŠ” 것 같은,,

μ’€ 더 κ°μ„±ν•΄μ„œ 문제λ₯Ό μ‘°κΈˆμ΄λΌλ„ 슀슀둜 ν’€λ € λ…Έλ ₯ν•΄λ³΄μž.


λ‹€λ₯Έ μ‚¬λžŒ 풀이

#1

function getMinSum(A,B){
    var answer = 0;
  for (var i=0, ii = A.length; i<ii ;i++){
     var max = Math.max(...A);
     var min = Math.min(...B);
     answer += max * min;
     A.splice(A.indexOf(max),1);
     B.splice(B.indexOf(min),1);
  }
    return answer;
}

풀이
1. for 문을 λŒμ•„ A λ°°μ—΄μ—μ„œ κ°€μž₯ 큰 κ°’ μΆ”μΆœ
2. B λ°°μ—΄μ—μ„œ κ°€μž₯ μž‘μ€ κ°’ μΆ”μΆœ
3. answer에 max * min 을 κ³±ν•œ 값을 λˆ„μ‚°
4. splice λ©”μ†Œλ“œλ₯Ό 톡해 μΆ”μΆœλœ 값이 μžˆλŠ” λ°°μ—΄ μ œκ±°ν›„ λ°˜ν™˜.

MDN - Array.splice λ©”μ†Œλ“œ

splice() λ©”μ„œλ“œλŠ” λ°°μ—΄μ˜ κΈ°μ‘΄ μš”μ†Œλ₯Ό μ‚­μ œ λ˜λŠ” κ΅μ²΄ν•˜κ±°λ‚˜ μƒˆ μš”μ†Œλ₯Ό μΆ”κ°€ν•˜μ—¬ λ°°μ—΄μ˜ λ‚΄μš©μ„ λ³€κ²½ν•©λ‹ˆλ‹€.

const months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
// Inserts at index 1
console.log(months);
// Expected output: Array ["Jan", "Feb", "March", "April", "June"]
months.splice(4, 1, 'May');
// Replaces 1 element at index 4
console.log(months);
// Expected output: Array ["Jan", "Feb", "March", "April", "May"]

ꡬ문
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])

더 μ •ν™•ν•œ μ„€λͺ…은 ν•΄λ‹Ή 링크λ₯Ό 톡해 μ‚΄νŽ΄λ³΄μž!

profile
방법을 연ꡬ할 쀄 μ•„λŠ” 개발자!

0개의 λŒ“κΈ€