ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ํ”„๋ฆฐํ„ฐ(Swift)

2022. 10. 14. 15:02ใ†ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค-Swift

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ํ”„๋ฆฐํ„ฐ(Swift)

 

 

 ๋ฌธ์ œ ์„ค๋ช…

 

https://school.programmers.co.kr/learn/courses/30/lessons/42587

 

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

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

programmers.co.kr

 

 ๋‹ค๋ฅธ์‚ฌ๋žŒ์˜ ํ’€์ด

 

์šฐ์„ ์ˆœ์œ„ ํ ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•˜์ง€๋งŒ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š”์ง€, ์ด ๋ฌธ์ œ์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•ด์•ผํ• ์ง€ ๋ชฐ๋ผ์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ๋‹ค. 

 

import Foundation

func solution(_ priorities:[Int], _ location:Int) -> Int {
    
    var queue: [(Int, Int)] = priorities.enumerated().map{ return ($0.offset, $0.element)}
    var priorityQueue = priorities.sorted(by: >)
    var result = 0
    
    while !queue.isEmpty {
        let first = queue.removeFirst()
        if first.1 == priorityQueue.first! {
            result += 1
            if first.0 == location {
                break
            }
            priorityQueue.removeFirst()  
        } else {
            queue.append(first)
        }
    }
    
    return result
}

 

๋ฌธ์ œ์˜ location์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ enumeratedํ•œ ํ›„ map์‹œ์ผœ์„œ ๋ฐฐ์—ด์˜ ํ˜•ํƒœ๋กœ ๋งŒ๋“  ๊ฒƒ์„ ํ๋กœ ์ •์˜ํ–ˆ๋‹ค. ์—ฌ๊ธฐ์„œ enumerated๋งŒ ์‚ฌ์šฉํ•˜๊ณ  map์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด EnumeratedSequence<Array<Int>>๋ผ๋Š” ์ƒˆ๋กœ์šด ํƒ€์ž…์ด ์žˆ๊ธฐ ๋–„๋ฌธ์— map์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

๋‘ ๋ฒˆ์งธ๋กœ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์ •์˜ํ•˜๋Š”๋ฐ ์‹ค์ œ ์šฐ์„ ์ˆœ์œ„ ํ๋Š” ํž™ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•ด์„œ ์‚ฝ์ž… ๋ฐ ์ œ๊ฑฐ์— O(logN)์„ ๋”ฐ๋ฅด๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด์ง€๋งŒ ๊ฒฐ๊ตญ ์ตœ๋Œ€๊ฐ’์„ ๋งจ ์•ž ์ธ๋ฑ์Šค์—์„œ ๋ฝ‘๋Š”๋‹ค๋Š” ๋งฅ๋ฝ๊ณผ ๋™์ผํ•˜๊ฒŒ sort๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ด์ฃผ์—ˆ๋‹ค.

 

์ด์ œ ์ด ๋‘ ๊ฐœ์˜ ํ๋ฅผ ๋น„๊ตํ•˜๋ฉด์„œ location๊ณผ queue์˜ offset์ด ๋™์ผํ•ด์ง€๋Š” ์‹œ์ ์˜ result๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.