관리 메뉴

πŸ–₯ dev-ruby

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€][Lv.1] μ†Œμˆ˜ λ§Œλ“€κΈ° | μžλ°”μŠ€ν¬λ¦½νŠΈ | Summer/Winter Coding(~2018) λ³Έλ¬Έ

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€][Lv.1] μ†Œμˆ˜ λ§Œλ“€κΈ° | μžλ°”μŠ€ν¬λ¦½νŠΈ | Summer/Winter Coding(~2018)

ruby_s 2022. 1. 1. 19:19
728x90
λ°˜μ‘ν˜•
SMALL

문제 μ„€λͺ…

주어진 숫자 쀑 3개의 수λ₯Ό λ”ν–ˆμ„ λ•Œ μ†Œμˆ˜κ°€ λ˜λŠ” 경우의 개수λ₯Ό κ΅¬ν•˜λ €κ³  ν•©λ‹ˆλ‹€. μˆ«μžλ“€μ΄ λ“€μ–΄μžˆλŠ” λ°°μ—΄ numsκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, nums에 μžˆλŠ” μˆ«μžλ“€ 쀑 μ„œλ‘œ λ‹€λ₯Έ 3개λ₯Ό 골라 λ”ν–ˆμ„ λ•Œ μ†Œμˆ˜κ°€ λ˜λŠ” 경우의 개수λ₯Ό return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

μ œν•œμ‚¬ν•­
  • nums에 λ“€μ–΄μžˆλŠ” 숫자의 κ°œμˆ˜λŠ” 3개 이상 50개 μ΄ν•˜μž…λ‹ˆλ‹€.
  • nums의 각 μ›μ†ŒλŠ” 1 이상 1,000 μ΄ν•˜μ˜ μžμ—°μˆ˜μ΄λ©°, μ€‘λ³΅λœ μˆ«μžκ°€ λ“€μ–΄μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

 

μž…μΆœλ ₯ 예
num result
[1,2,3,4] 1
[1,2,7,6,4] 4
μž…μΆœλ ₯ 예 μ„€λͺ…

μž…μΆœλ ₯ 예 #1
[1,2,4]λ₯Ό μ΄μš©ν•΄μ„œ 7을 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ 예 #2
[1,2,4]λ₯Ό μ΄μš©ν•΄μ„œ 7을 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.
[1,4,6]을 μ΄μš©ν•΄μ„œ 11을 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.
[2,4,7]을 μ΄μš©ν•΄μ„œ 13을 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.
[4,6,7]을 μ΄μš©ν•΄μ„œ 17을 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.


 λ‚΄κ°€ ν‘Ό 풀이

function getCombination(arr, n){
    const results = [];
    if (n === 1) return arr.map((el) => [el]); 

    arr.forEach((fixed, idx, origin) => {
      const rest = origin.slice(idx + 1);
      const combinations = getCombination(rest, n - 1);
      const attached = combinations.map((el) => [fixed, ...el]);
      results.push(...attached);
    });
    return results;
}

function isPrime(sum){
    if(sum % 2 === 0) return false;
    for(let i=2; i<sum; i++)
        if(sum % i === 0) return false;
    return true;
}

function solution(nums) {
    return getCombination(nums, 3).filter((arr)=>isPrime(arr.reduce((acc, curr)=>acc+curr, 0))).length;
}

μ‘°ν•© μ½”λ“œλ₯Ό 잘 μ•Œμ•„λ‘μž ..
μ†Œμˆ˜ κ²€μ‚¬ν•˜λŠ” μ½”λ“œλ„.
레벨 1인데 μ‘°ν•© λ§Œλ“œλŠ” 방법이 자꾸 ν—·κ°ˆλ €μ„œ μ–΄λ €μ› λ‹€μ•„γ…  λ°œμ „ν•˜μž

728x90
λ°˜μ‘ν˜•
LIST