MUKER_DEV with iOS

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์ฒด์œก๋ณต ๋ณธ๋ฌธ

๐Ÿค– ์•Œ๊ณ ๋ฆฌ์ฆ˜/programmers

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์ฒด์œก๋ณต

MUKER 2023. 2. 7. 13:20
 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

๋ฌธ์ œ ํ‘ธ๋Š” ๋ฐ ์žˆ์–ด ๋„์›€์ด ๋˜๋„๋ก ๋‚˜์˜ ํ’€์ด์™€ ๊ฐœ์„ ๋œ ํ’€์ด๋ฅผ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.
๋˜ํ•œ ํ’€์ด ํ›„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด๋ฅผ ๋ณด๊ณ  ์ฐธ๊ณ ํ• ๋งŒํ•œ ํ’€์ด๋„ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

- ๋ฌธ์ œ์— ๋”ฐ๋ผ ๋‚˜์˜ ํ’€์ด๋งŒ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- ํ•ด๋‹น ํ’€์ด๋“ค์€ ํ’€์ด ์ค‘ ํ•˜๋‚˜์ผ ๋ฟ ์ตœ์„ ์˜ ํ’€์ด๋Š” ์•„๋‹ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


 

๋ฌธ์ œ ์„ค๋ช…

 

- lost๋ฐฐ์—ด์—๋Š” ์ฒด์œก๋ณต์„ ๊ฐ€์ ธ์˜ค์ง€ ๋ชปํ•œ ํ•™์ƒ์ด, reserve๋ฐฐ์—ด์—๋Š” ์—ฌ๋ถ„์˜ ์ฒด์œก๋ณต์„ ๊ฐ€์ ธ์˜จ ํ•™์ƒ์ด ์ž…๋ ฅ๋ฉ๋‹ˆ๋‹ค.

 

- ์—ฌ๋ถ„์˜ ์ฒด์œก๋ณต์„ ๊ฐ€์ ธ์˜จ ํ•™์ƒ์€ ๋ณธ์ธ์„ ๊ธฐ์ค€์œผ๋กœ ์•ž, ๋’ค ํ•™์ƒ์—๊ฒŒ ์ฒด์œก๋ณต์„ ๋นŒ๋ ค ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

- lost๋ฐฐ์—ด๊ณผ reserve๋ฐฐ์—ด ๋‘˜ ๋‹ค ํ•ด๋‹นํ•˜๋Š” ํ•™์ƒ๋„ ์กด์žฌํ•˜๋ฉฐ, ํ•ด๋‹น ํ•™์ƒ์€ ๋‹ค๋ฅธ ํ•™์ƒ์—๊ฒŒ ์ฒด์œก๋ณต์„ ๋นŒ๋ ค์ค„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

- ์ฒด์œก๋ณต์„ ๋นŒ๋ฆฐ ํ•™์ƒ๊นŒ์ง€ ํฌํ•จ ์ฒด์œก๋ณต์ด ์žˆ๋Š” ํ•™์ƒ์„ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.

 


 

๋‚˜์˜ ํ’€์ด

import Foundation

func solution(_ n:Int, _ lost:[Int], _ reserve:[Int]) -> Int {
    var lostStudent = lost.sorted()
    var reserveStudent = reserve.sorted()
    
    for i in reserveStudent {
        if lostStudent.contains(i) {
            lostStudent.remove(at: lostStudent.firstIndex(of: i)!)
            reserveStudent.remove(at: reserveStudent.firstIndex(of: i)!)
        }
    }
    
    for i in reserveStudent {
        guard !lostStudent.isEmpty else { break }
        
        if lostStudent.contains(i-1) {
            lostStudent.remove(at: lostStudent.firstIndex(of: i-1)!)
            continue
        }
        
        if lostStudent.contains(i+1) {
            lostStudent.remove(at: lostStudent.firstIndex(of: i+1)!)
            continue
        }
    }
    return n-lostStudent.count
}

 

lostStudent์—๋Š” ์ฒด์œก๋ณต์ด ์—†๋Š” ํ•™์ƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒด์œก๋ณต์„ ๋นŒ๋ฆฌ๊ฒŒ ๋œ๋‹ค๋ฉด ํ•ด๋‹น ๋ฐฐ์—ด์—์„œ ์ง€์› ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ n(๋ชจ๋“ ํ•™์ƒ) - lostStudent.count(์ฒด์œก๋ณต์„ ๋นŒ๋ฆฌ์ง€ ๋ชปํ•œ ํ•™์ƒ ์ˆ˜)๋กœ ๊ฐ’์„ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.

 

์ฒ˜์Œ ์ฃผ์–ด์ง€๋Š” lost์™€ reserve๋ฐฐ์—ด์€ ์ •๋ ฌ์ด ์•ˆ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

์ •๋ ฌํ•˜์—ฌ ๋ณ€์ˆ˜์— ๋‹ด์Šต๋‹ˆ๋‹ค.

 

lost์™€ reserve ์–‘ ์ชฝ์— ๋‹ค ํฌํ•จ๋˜๋Š” ๊ฐ’์€

๋‘ ๋ฐฐ์—ด ๋ชจ๋‘์—์„œ ์‚ญ์ œ์‹œ์ผœ ์ค๋‹ˆ๋‹ค.

 

์—ฌ๋ถ„์ด ์žˆ๋Š” ํ•™์ƒ ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ

๋ณธ์ธ ์•ž, ๋’ค๋ฅผ ํ™•์ธํ•˜๋ฉฐ

์ฒด์œก๋ณต์ด ์—†๋Š” ํ•™์ƒ์ด ํ•ด๋‹น๋˜๋ฉด

ํ•ด๋‹น ํ•™์ƒ์€ lost๋ฐฐ์—ด์—์„œ ์‚ญ์ œ๋˜๋ฉฐ

๋‹ค์Œ ๋ฐ˜๋ณต์œผ๋กœ ๋„˜๊ฒจ์ค๋‹ˆ๋‹ค.

 


 

 

์ฐธ๊ณ ํ• ๋งŒํ•œ ํ’€์ด

import Foundation

func solution(_ n: Int, _ lost: [Int], _ reserve: [Int]) -> Int {
    let newReserve = reserve.filter { !lost.contains($0) }
    let newLost = lost.filter { !reserve.contains($0) }

    var lostPeople: Int = newLost.count

    newReserve.forEach {
        let isLend: Bool = newLost.contains($0 - 1) || newLost.contains($0 + 1)
        if isLend && lostPeople > 0 {
            lostPeople -= 1
        }
    }

    return n - lostPeople
}

 

ํ•ด๋‹น ํ’€์ด๋ฅผ ๋ณด๋ฉด

ํ’€์ด ๋ฐฉ์‹์€ ๋น„์Šทํ•˜์ง€๋งŒ

๊ตณ์ด ๋ฐฐ์—ด์˜ ๊ฐ’์„ ์ง€์›Œ๊ฐ€๋ฉฐ ๋ฌธ์ œ๋ฅผ ํ’€ ํ•„์š”๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋ฐฐ์—ด์˜ count๊ฐ’์œผ๋กœ ์ฒด์œก๋ณต์ด ์—†๋Š” ํ•™์ƒ ์ˆ˜๋ฅผ ํŒŒ์•…ํ•ด

์ฒด์œก๋ณต์„ ๋นŒ๋ฆฌ๋ฉด -1์”ฉ ํ•˜์—ฌ

์ฒด์œก๋ณต์„ ๋นŒ๋ฆฌ์ง€ ๋ชปํ•œ ํ•™์ƒ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋˜ํ•œ ์ •๋ ฌ์„ ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์„œ ์‹œ๊ฐ„๋ฉด์—์„œ๋„ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.