πŸ”’ Algorithm

[Javascript][Programmers] μ™„μ£Όν•˜μ§€ λͺ»ν•œ μ„ μˆ˜

μœ€λ„κΈ° 2024. 9. 23. 12:19
λ°˜μ‘ν˜•

 

문제

ν•΄λ‹Ή 문제λ₯Ό ν•΄κ²°ν•˜λŠ” κ°€μž₯ κ°„λ‹¨ν•œ 방법은 ν•˜λ‚˜μ”© λŒ€μ‘°ν•˜λ©° μ™„μ£Όν•˜μ§€ λͺ»ν•œ μ‚¬λžŒμ„ μ°ΎλŠ” κ²ƒμž…λ‹ˆλ‹€. μ™„μ£Όμž λͺ©λ‘μ— μžˆλŠ” 이름을 μ°Έκ°€μž λͺ©λ‘μ—μ„œ ν•˜λ‚˜μ”© μ‚­μ œν•˜λ‹€λ³΄λ©΄ μ™„μ£Όν•˜μ§€ λͺ»ν•œ ν•œ μ‚¬λžŒμ„ 찾을 수 있게 λ©λ‹ˆλ‹€. κ°€μž₯ 직관적인 방법은 두 배열을 μ •λ ¬ν•œ ν›„ μˆœμ„œλŒ€λ‘œ λΉ„κ΅ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

  • μ‹œκ°„λ³΅μž‘λ„: O(NlogN)
function solutionWithSort(participant, completion) {
    participant.sort();
    completion.sort();
    for(let i = 0; i < participant.length; i++) {
        if(participant[i] !== completion[i]) {
            return participant[i];
        }
    }
}

이 방법은 κ°„λ‹¨ν•˜κ³  μ΄ν•΄ν•˜κΈ° μ‰½μ§€λ§Œ λŒ€κ·œλͺ¨ λ°μ΄ν„°μ…‹μ—μ„œλŠ” νš¨μœ¨μ„±μ΄ λ–¨μ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

λ‚˜μ˜ 풀이

더 효율적인 λ°©λ²•μœΌλ‘œ ν•΄μ‹œ 맡을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • μ‹œκ°„λ³΅μž‘λ„: O(N)
function solution(participant, completion) {
    const hashMap = new Map();
    
    for(let name of participant) {
        hashMap.set(name, (hashMap.get(name) || 0) + 1);
    }
    
    for(let name of completion) {
        let count = hashMap.get(name);
        if(count === 1) {
            hashMap.delete(name);
        } else {
            hashMap.set(name, count - 1);
        }
    }
    
    return hashMap.keys().next().value[0]
}

각 μ°Έκ°€μžμ˜ 이름을 ν‚€λ‘œ, λ“±μž₯ 횟수λ₯Ό κ°’μœΌλ‘œ ν•˜λŠ” ν•΄μ‹œ 맡을 μƒμ„±ν•©λ‹ˆλ‹€. μ™„μ£Όμž λͺ©λ‘μ„ μˆœνšŒν•˜λ©΄μ„œ ν•΄λ‹Ή μ΄λ¦„μ˜ 카운트λ₯Ό κ°μ†Œμ‹œν‚€κ³ , μ΅œμ’…μ μœΌλ‘œ 맡에 λ‚¨μ•„μžˆλŠ” μœ μΌν•œ ν‚€κ°€ μ™„μ£Όν•˜μ§€ λͺ»ν•œ μ„ μˆ˜μ˜ 이름이 λ©λ‹ˆλ‹€.

 

λ‹€λ₯Έ 풀이

객체λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•΄κ²°ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

  • μ‹œκ°„λ³΅μž‘λ„: O(N)
function solution(participant, completion) {
  // ➊ ν•΄μ‹œ ν…Œμ΄λΈ” 생성
  const obj = {};

  // βž‹ μ°Έκ°€μžλ“€μ˜ 이름을 ν•΄μ‹œ ν…Œμ΄λΈ”μ— μΆ”κ°€
  for (const p of participant) {
    if (obj[p]) {
      obj[p] += 1;
    } else {
      obj[p] = 1;
    }
  }

  // ➌ μ™„μ£Όν•œ μ„ μˆ˜λ“€μ˜ 이름을 ν‚€λ‘œ ν•˜λŠ” 값을 1μ”© κ°μ†Œ
  for (const c of completion) {
    obj[c] -= 1;
  }

  // ➍ ν•΄μ‹œ ν…Œμ΄λΈ”μ— 남아 μžˆλŠ” μ„ μˆ˜κ°€ μ™„μ£Όν•˜μ§€ λͺ»ν•œ μ„ μˆ˜
  for (const key in obj) {
    if (obj[key] > 0) {
      return key;
    }
  }
}

 


Reference

μ½”λ”©ν…ŒμŠ€νŠΈ ν•©κ²©μžλ˜κΈ°: μžλ°”μŠ€ν¬λ¦½νŠΈ 편

λ°˜μ‘ν˜•