λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
⌨️ Language/swift

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

by hyebin (Helia) 2023. 2. 24.
λ°˜μ‘ν˜•
ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ LV.1 λͺ¨μŒ

체윑볡

문제 μ„€λͺ…

μ μ‹¬μ‹œκ°„μ— 도둑이 λ“€μ–΄, 일뢀 학생이 μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν–ˆμŠ΅λ‹ˆλ‹€. λ‹€ν–‰νžˆ μ—¬λ²Œ 체윑볡이 μžˆλŠ” 학생이 μ΄λ“€μ—κ²Œ μ²΄μœ‘λ³΅μ„ 빌렀주렀 ν•©λ‹ˆλ‹€. ν•™μƒλ“€μ˜ λ²ˆν˜ΈλŠ” 체격 순으둜 맀겨져 μžˆμ–΄, λ°”λ‘œ μ•žλ²ˆν˜Έμ˜ ν•™μƒμ΄λ‚˜ λ°”λ‘œ λ’·λ²ˆν˜Έμ˜ ν•™μƒμ—κ²Œλ§Œ μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, 4번 학생은 3번 ν•™μƒμ΄λ‚˜ 5번 ν•™μƒμ—κ²Œλ§Œ μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€. 체윑볡이 μ—†μœΌλ©΄ μˆ˜μ—…μ„ 듀을 수 μ—†κΈ° λ•Œλ¬Έμ— μ²΄μœ‘λ³΅μ„ 적절히 빌렀 μ΅œλŒ€ν•œ λ§Žμ€ 학생이 μ²΄μœ‘μˆ˜μ—…μ„ λ“€μ–΄μ•Ό ν•©λ‹ˆλ‹€.

 

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

μ œν•œ 사항

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

μž…μΆœλ ₯ 예

n lost reserve return
5 [2, 4] [1, 3, 5] 5
5 [2, 4] [3] 4
3 [3] [1] 2

μž…μΆœλ ₯ 예 μ„€λͺ…

μž…μΆœλ ₯ 예 #1

  • 1번 ν•™μƒμ΄ 2번 ν•™μƒμ—κ²Œ μ²΄μœ‘볡을 λΉŒλ €μ£Όκ³ , 3번 ν•™μƒμ΄λ‚˜ 5번 ν•™μƒμ΄ 4번 ν•™μƒμ—κ²Œ μ²΄μœ‘볡을 λΉŒλ €μ£Όλ©΄ ν•™μƒ 5λͺ…이 μ²΄μœ‘μˆ˜μ—…μ„ λ“€μ„ μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ 예 #2

  • 3번 ν•™μƒμ΄ 2번 ν•™μƒμ΄λ‚˜ 4번 ν•™μƒμ—κ²Œ μ²΄μœ‘볡을 λΉŒλ €μ£Όλ©΄ ν•™μƒ 4λͺ…이 μ²΄μœ‘μˆ˜μ—…μ„ λ“€μ„ μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

제좜

import Foundation

func solution(_ n:Int, _ lost:[Int], _ reserve:[Int]) -> Int {
    var reserveList = reserve.sorted()
    var lostList = lost.sorted()

    for reserveItem in reserveList {
        if let lostIndex = lostList.firstIndex(of:reserveItem),
            let reserveIndex = reserveList.firstIndex(of: reserveItem) {
            reserveList.remove(at: reserveIndex)
            lostList.remove(at:lostIndex)
        }
    }

    var count = n - lostList.count
   
    for lostIndex in lostList {
        if let index = reserveList.firstIndex(of:lostIndex - 1) {
            reserveList.remove(at:index)
            count += 1
        }else  if let index = reserveList.firstIndex(of:lostIndex + 1) {
           reserveList.remove(at:index)
            count += 1
        }
    }
    return count
}
μž…λ ₯받은 두 배열을 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œλ‹€.
μ—¬λΆ„μ˜ μ²΄μœ‘λ³΅μ„ κ°€μ Έμ˜¨ 학생과 μ²΄μœ‘λ³΅μ„ μžƒμ–΄λ²„λ¦° 학생이 λ™μΌν•œ 경우 (두 배열에 λͺ¨λ‘ 같은 숫자의 μš”μ†Œκ°€ μžˆλŠ” 경우) λ‘ λ°°μ—΄μ—μ„œ ν•΄λ‹Ή μš”μ†Œλ₯Ό μ‚­μ œν•œλ‹€.

count λ³€μˆ˜λ₯Ό μƒμ„±ν•˜μ—¬ 전체 ν•™μƒμˆ˜μ—μ„œ μ²΄μœ‘λ³΅μ„ μžƒμ–΄λ²„λ¦° ν•™μƒμ˜ 수λ₯Ό λΊ€λ‹€. (μˆ˜μ—…μ„ 듀을 수 μžˆλŠ” ν•™μƒμ˜ 수)
μ²΄μœ‘λ³΅μ„ μžƒμ–΄λ²„λ¦° ν•™μƒμ˜ μ•ž 번호 λ˜λŠ” λ’· λ²ˆν˜Έμ— 학생이 μ—¬λΆ„μ˜ μ²΄μœ‘λ³΅μ„ κ°€μ Έμ˜¨ 경우 reserveλ°°μ—΄μ—μ„œ ν•΄λ‹Ή ν•™μƒμ˜ μš”μ†Œλ₯Ό μ‚­μ œν•œ ν›„ count λ³€μˆ˜λ₯Ό 1 μ¦κ°€μ‹œν‚¨λ‹€.

λ‹€λ₯Έ 풀이

import Foundation

func solution(_ n:Int, _ lost:[Int], _ reserve:[Int]) -> Int {
    let lostArray = lost.filter{!reserve.contains($0)}
    let reserveArray = reserve.filter{!lost.contains($0)}
    var lostCount = lostArray.count
    
    reserveArray.forEach { index in
        if (lostArray.contains(index-1) || lostArray.contains(index+1)) && lostCount > 0 {
            lostCount -= 1
        }
    }
    return n - lostCount
}
filterν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ lost와 reserve 두 배열에 κ³΅ν†΅μœΌλ‘œ λ“€μ–΄κ°€λŠ” μš”μ†ŒλŠ” μ œμ™Έν•œλ‹€.
μ²΄μœ‘λ³΅μ„ μžƒμ–΄λ²„λ¦° ν•™μƒμ˜ 수λ₯Ό μ €μž₯ν•œ lostCount λ³€μˆ˜λ₯Ό μƒμ„±ν•œλ‹€.

reserveArray의 μš”μ†Œλ“€ 쀑 (μš”μ†Œ-1) λ˜λŠ” (μš”μ†Œ+1) 값이 lostArray에 ν¬ν•¨λ˜μ–΄ 있고, lostCountκ°€ 0 이상인 경우, lostCountλ₯Ό 1 λΊ€λ‹€.
전체 학생 수 μ—μ„œ lostCountλ₯Ό λΊ€ λ‚˜λ¨Έμ§€λ₯Ό λ°˜ν™˜ν•œλ‹€.
λ°˜μ‘ν˜•