DEV_IN/λ¬Έμ œν’€μ΄

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

λ‹€λΉˆμΉ˜μ½”λ“œπŸ’Ž 2023. 3. 21. 15:02

β“λ¬Έμ œ μ„€λͺ…

길이가 같은 λ°°μ—΄ 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 μ΄ν•˜μ˜ μžμ—°μˆ˜

πŸ—οΈ μž…μΆœλ ₯ 예

A B answer
[1, 4, 2] [5, 4, 4] 29
[1,2] [3,4] 10

β—οΈλΉ„λ‹ˆ's 풀이

일단 두 수λ₯Ό κ³±ν•œ λˆ„μ  합이 μ΅œμ†Ÿκ°’μ΄ 되렀면 ν•˜λ‚˜λŠ” μ˜€λ¦„μ°¨μˆœμœΌλ‘œ, ν•˜λ‚˜λŠ” λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜μ—¬ μ΅œμ†Ÿκ°’*μ΅œλŒ€κ°’μœΌλ‘œ λ”°λ‘œ λ¬Άμ–΄ κ³„μ‚°ν•˜λ©΄ λœλ‹€λŠ” λ‘œμ§μ€ λ– μ˜¬λžλ‹€.

이 ν›„, λ°˜λ³΅λ¬Έμ„ λ‘κ°œλ₯Ό λŒλ €μ„œ 두 λ°°μ—΄μ˜ 값듀을 κ³„μ‚°ν•˜λ €κ³  ν–ˆλ‹€. κ·Έλ ‡κ²Œ ν•˜λ‹ˆ λͺ¨λ“  μ›μ†Œλ₯Ό λ‹€ 돌며 μ€‘λ³΅μ μœΌλ‘œ λˆ„μ  계산이 λ˜μ–΄ λ°˜λ³΅λ¬Έμ„ ν•œλ²ˆμœΌλ‘œ λ°”κΏ”μ„œ ν•΄κ²°ν–ˆλ‹€.

function solution(A, B) {
    let arr1 = A.sort((a, b) => a - b); //[1,2,4] [1,2] μ˜€λ¦„μ°¨μˆœ
    let arr2 = B.sort((a, b) => b - a); //[5,4,4] [4,3] λ‚΄λ¦Όμ°¨μˆœ
    let res = 0;

    for (let i = 0; i < arr1.length; i++) {
        res = res + arr1[i] * arr2[i];
    }
    return res;
}