Recent Posts
Recent Comments
Link
Β«   2024/09   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

kohigowild

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 체윑볡 λ³Έλ¬Έ

Algorithm

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 체윑볡

kohi β˜• 2022. 10. 6. 18:34

πŸ‘Ύ 문제 μ„€λͺ…

μ μ‹¬μ‹œκ°„μ— 도둑이 λ“€μ–΄, 일뢀 학생이 μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν–ˆμŠ΅λ‹ˆλ‹€. λ‹€ν–‰νžˆ μ—¬λ²Œ 체윑볡이 μžˆλŠ” 학생이 μ΄λ“€μ—κ²Œ μ²΄μœ‘λ³΅μ„ 빌렀주렀 ν•©λ‹ˆλ‹€. ν•™μƒλ“€μ˜ λ²ˆν˜ΈλŠ” 체격 순으둜 맀겨져 μžˆμ–΄, λ°”λ‘œ μ•žλ²ˆν˜Έμ˜ ν•™μƒμ΄λ‚˜ λ°”λ‘œ λ’·λ²ˆν˜Έμ˜ ν•™μƒμ—κ²Œλ§Œ μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 4번 학생은 3번 ν•™μƒμ΄λ‚˜ 5번 ν•™μƒμ—κ²Œλ§Œ μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€. 체윑볡이 μ—†μœΌλ©΄ μˆ˜μ—…μ„ 듀을 수 μ—†κΈ° λ•Œλ¬Έμ— μ²΄μœ‘λ³΅μ„ 적절히 빌렀 μ΅œλŒ€ν•œ λ§Žμ€ 학생이 μ²΄μœ‘μˆ˜μ—…μ„ λ“€μ–΄μ•Ό ν•©λ‹ˆλ‹€.

전체 ν•™μƒμ˜ 수 n, μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν•œ ν•™μƒλ“€μ˜ λ²ˆν˜Έκ°€ λ‹΄κΈ΄ λ°°μ—΄ lost, μ—¬λ²Œμ˜ μ²΄μœ‘λ³΅μ„ κ°€μ Έμ˜¨ ν•™μƒλ“€μ˜ λ²ˆν˜Έκ°€ λ‹΄κΈ΄ λ°°μ—΄ reserveκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μ²΄μœ‘μˆ˜μ—…μ„ 듀을 수 μžˆλŠ” ν•™μƒμ˜ μ΅œλŒ“κ°’μ„ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μž‘μ„±ν•΄μ£Όμ„Έμš”.

πŸ‘Ύ μ œν•œμ‚¬ν•­

  • 전체 ν•™μƒμ˜ μˆ˜λŠ” 2λͺ… 이상 30λͺ… μ΄ν•˜μž…λ‹ˆλ‹€.
  • μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν•œ ν•™μƒμ˜ μˆ˜λŠ” 1λͺ… 이상 nλͺ… μ΄ν•˜μ΄κ³  μ€‘λ³΅λ˜λŠ” λ²ˆν˜ΈλŠ” μ—†μŠ΅λ‹ˆλ‹€.
  • μ—¬λ²Œμ˜ μ²΄μœ‘λ³΅μ„ κ°€μ Έμ˜¨ ν•™μƒμ˜ μˆ˜λŠ” 1λͺ… 이상 nλͺ… μ΄ν•˜μ΄κ³  μ€‘λ³΅λ˜λŠ” λ²ˆν˜ΈλŠ” μ—†μŠ΅λ‹ˆλ‹€.
  • μ—¬λ²Œ 체윑볡이 μžˆλŠ” ν•™μƒλ§Œ λ‹€λ₯Έ ν•™μƒμ—κ²Œ μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ—¬λ²Œ μ²΄μœ‘λ³΅μ„ κ°€μ Έμ˜¨ 학생이 μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν–ˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ 이 학생은 μ²΄μœ‘λ³΅μ„ ν•˜λ‚˜λ§Œ λ„λ‚œλ‹Ήν–ˆλ‹€κ³  κ°€μ •ν•˜λ©°, 남은 체윑볡이 ν•˜λ‚˜μ΄κΈ°μ— λ‹€λ₯Έ ν•™μƒμ—κ²ŒλŠ” μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μ—†μŠ΅λ‹ˆλ‹€.

 

πŸ‘Ύ λ‚˜μ˜ λ‹΅μ•ˆ

function solution(n, lost, reserve) {

    let student = new Array(n + 1).fill(1);
    student[0] = 0;
    
    for (let i = 1; i <= lost.length; ++i) {
        student[lost[i - 1]] -= 1;
    }

    for (let i = 1; i <= reserve.length; ++i) {
        student[reserve[i - 1]] += 1;
    }

    let answer = student.filter((n) => n !== 0).length;
    
    for (let i = 1; i <= n; ++i) {
        if ((student[i] === 0 && student[i + 1] === 2) || (student[i + 1] === 0 && student[i] === 2)) {
            student[i] = 1;
            student[i + 1] = 1;
            answer++;
        }
    }
    return answer;
}

 

  • μ²˜μŒμ— μ“΄ μ½”λ“œλŠ” 였λ₯˜κ°€ λ– μ„œ ꡬ글링을 톡해 λΉ„μŠ·ν•˜κ²Œ μ ‘κ·Όν•œ λ‹΅μ•ˆμ„ μ°Ύκ³  μ½”λ“œλ₯Ό μˆ˜μ •ν•˜μ˜€λ‹€.
  • λͺ¨λ“  학생이 μ²΄μœ‘λ³΅μ„ κ°–κ³  μžˆλ‹€κ³  κ°€μ •ν•œ λ°°μ—΄ studentλ₯Ό μ„ μ–Έν•˜κ³ , 1번 μΈλ±μŠ€λΆ€ν„° μ‚¬μš©
  • μ²΄μœ‘λ³΅μ„ λ„λ‚œ λ‹Ήν•œ 학생은 -1, μ—¬λ²Œμ˜ μ²΄μœ‘λ³΅μ„ κ°€μ Έμ˜¨ 학생은 +1 | student λ°°μ—΄μ˜ μΈλ±μŠ€μ— λ§žμΆ°μ„œ +1 or -1
  • 쑰건문을 톡해 μΈμ ‘ν•œ λ°°μ—΄μ˜ κ°’μ˜ 차이가 2인 경우, 각 값을 1둜 λ³€κ²½ν•˜κ³  answer에 1을 λ”ν•œλ‹€.

 

πŸ‘Ύ λ‹€λ₯Έ μ‚¬λžŒμ˜ 풀이

function solution(n, lost, reserve) {
    const students = {};
    let answer = 0;
    for (let i = 1; i <= n; i++) {
        students[i] = 1;
    }

    lost.forEach((number) => (students[number] -= 1));
    reserve.forEach((number) => (students[number] += 1));

    for (let i = 1; i <= n; i++) {
        if (students[i] === 2 && students[i - 1] === 0) {
            students[i - 1]++;
            students[i]--;
        } else if (students[i] === 2 && students[i + 1] === 0) {
            students[i + 1]++;
            students[i]--;
        }
    }

    for (let key in students) {
        if (students[key] >= 1) {
            answer++;
        }
    }

    return answer;
}