๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ–ฅ CS/Algorithm

[Algorithm/Swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค(Lv.2) - ํƒ๋ฐฐ ๋ฐฐ๋‹ฌ๊ณผ ์ˆ˜๊ฑฐํ•˜๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š” ์ œ์ธ์ž…๋‹ˆ๋‹ค :)

์š”์ฆ˜ PS๋ฅผ ์—ฐ์Šตํ•˜๋ฉฐ ์•„์ด๋””์–ด๋ฅผ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋Šฅ๋ ฅ์ด ๋ถ€์กฑํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ๊ณ  ์žˆ๋Š”๋ฐ์š”,,,

์ฐจ๊ทผ์ฐจ๊ทผ ๊ธฐ๋ก๋„ ํ•ด๊ฐ€๋ฉฐ ์‹ค๋ ฅ์„ ๋†’์—ฌ๊ฐ€์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค..!!

Greedy ์œ ํ˜•์ธ 2023 KAKAO BLIND RECRUITMENT - ํƒ๋ฐฐ ๋ฐฐ๋‹ฌ๊ณผ ์ˆ˜๊ฑฐํ•˜๊ธฐ ๋ฌธ์ œ ํ’€์ด๋ฅผ ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค๐Ÿ˜Š

๋ฌธ์ œ ๋งํฌ

 

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

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

programmers.co.kr

๋ฌธ์ œ ํ’€์ด

์ฒ˜์Œ ์ ‘๊ทผ

์ผ๋‹จ ๋ฌธ์ œ๋ฅผ ์ฝ๊ณ  ๊ทธ๋ฆฌ๋””๋กœ ํ’€์–ด์•ผ๊ฒ ๋‹ค๋Š” ์•„์ด๋””์–ด๋Š” ๋– ์˜ฌ๋ž๋Š”๋ฐ, ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์€ ํ•˜์ง€ ๋ชปํ•ด ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ ๋ฐ ์กฐ๊ฑด์„ ํŒ๋‹จํ•ด์ฃผ๊ธฐ๊ฐ€ ๊นŒ๋‹ค๋กญ๋‹ค๊ณ  ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค๐Ÿฅฒ (ํƒ๋ฐฐ ์ˆ˜๊ฑฐ ์‹œ ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ 0์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ  ๋˜ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•ด์•ผ ํ•  ์ง‘์„ ํ™•์ธํ•˜๋Š” ์‹์œผ๋กœ ํ’€์—ˆ๊ฑฐ๋“ ์—ฌ..)

๊ทธ๋ฆฌ๋”” + ์Šคํƒ์„ ํ™œ์šฉํ•œ ํ’€์ด

์ตœ์ข…์ ์œผ๋กœ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๊ฐ’์€ ํŠธ๋Ÿญ ํ•˜๋‚˜๋กœ ๋ชจ๋“  ๋ฐฐ๋‹ฌ๊ณผ ์ˆ˜๊ฑฐ๋ฅผ ๋งˆ์น˜๊ณ  ๋ฌผ๋ฅ˜์ฐฝ๊ณ ๊นŒ์ง€ ๋Œ์•„์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ์ด๋™ ๊ฑฐ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ฆฌ๋”” ์ „๋žต์œผ๋กœ ๋งค ์ˆœ๊ฐ„ ์ตœ์†Œ ์ด๋™ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•ด ์ตœ์ข…์ ์ธ ๊ฐ’๊นŒ์ง€ ๊ตฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์ด ๋•Œ, ๋ฌธ์ œ์—์„œ ์ œ์‹œ๋œ ์กฐ๊ฑด์„ ํ™•์ธํ•ด๋ณด๋ฉด ํ•œ ์‚ฌ์ดํด์„ ์™•๋ณต ํ•œ ๋ฒˆ์œผ๋กœ ์žก์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ฐฝ๊ณ ์—์„œ ์ถœ๋ฐœํ•ด ๋Œ์•„์™€์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ) 

ํ•œ ์‚ฌ์ดํด ๋™์•ˆ ์ตœ๋Œ€๋กœ ๋ฐฐ๋‹ฌ, ์ตœ๋Œ€๋กœ ์ˆ˜๊ฑฐ(cap ๋งŒํผ)๋ฅผ ํ•˜๋ฉด ํ•œ ์‚ฌ์ดํด์˜ ์ตœ์†Œ ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๊ณ , ์‚ฌ์ดํด ๋ฐ˜๋ณต ํšŸ์ˆ˜๋ฅผ ์ตœ๋Œ€๋กœ ์ค„์ด๋Š” ๋ฐฉ์‹์œผ๋กœ ์ตœ์ข…์ ์ธ ๊ฐ’์„ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ •๋ฆฌํ•ด๋ณด์ž๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํŠธ๋Ÿญ์„ ์›€์ง์ด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

1. ๋ฐฐ๋‹ฌ ๋ฐ ์ˆ˜๊ฑฐํ•  ํƒ๋ฐฐ ์ƒ์ž๊ฐ€ ๋‚จ์€ ๊ฐ€์žฅ ๋จผ ์ง‘๋ถ€ํ„ฐ ํƒ๋ฐฐ๋ฅผ ๋ฐฐ๋‹ฌ ๋ฐ ์ˆ˜๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
2. ํŠธ๋Ÿญ์ด ๋ฌผ๋ฅ˜์ฐฝ๊ณ ์—์„œ ์ถœ๋ฐœํ•ด ๊ฐ€์žฅ ๋จผ ์ง‘์œผ๋กœ ์ด๋™ํ•  ๋•Œ๋Š” ๋ฐฐ๋‹ฌ๋งŒ ํ•˜๊ณ , ๋‹ค์‹œ ๋ฌผ๋ฅ˜์ฐฝ๊ณ ๋กœ ๋Œ์•„์˜ฌ ๋•Œ๋Š” ์ˆ˜๊ฑฐ๋งŒ ํ•ฉ๋‹ˆ๋‹ค.
3. ํŠธ๋Ÿญ์ด ๋ฌผ๋ฅ˜์ฐฝ๊ณ ์—์„œ ์ถœ๋ฐœํ•  ๋•Œ ํ•ญ์ƒ ํƒ๋ฐฐ๋ฅผ ์ตœ๋Œ€ ๊ฐœ์ˆ˜(cap)๋งŒํผ ๋ฐฐ๋‹ฌํ•˜๊ณ , ๋ฌผ๋ฅ˜์ฐฝ๊ณ ๋กœ ๋Œ์•„๊ฐˆ ๋•Œ ์ตœ๋Œ€ ๊ฐœ์ˆ˜(cap)๋งŒํผ ์ˆ˜๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

 

ํ•ญ์ƒ ์ฐฝ๊ณ ์—์„œ ๊ฐ€์žฅ ๋จผ ์ง‘๋ถ€ํ„ฐ ๋ฐฐ๋‹ฌํ•˜๊ณ , ์ˆ˜๊ฑฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•ด์„œ ์™„๋ฃŒ๋œ ์ง‘์€ popํ•˜๋Š” ๋ฐฉ์‚ญ์œผ๋กœ ๋ฐฐ๋‹ฌ or ์ˆ˜๊ฑฐ ์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋ฐฐ๋‹ฌ ์Šคํƒ, ์ˆ˜๊ฑฐ ์Šคํƒ ํ•˜๋‚˜์”ฉ ์ด ๋‘ ๊ฐœ์˜ ์Šคํƒ ์ด์šฉ)

 

์ด๋Ÿฌํ•œ ์•„์ด๋””์–ด๋ฅผ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Swift ํ’€์ด ์ฝ”๋“œ

import Foundation

func solution(_ cap:Int, _ n:Int, _ deliveries:[Int], _ pickups:[Int]) -> Int64 {
    var deliveries = deliveries
    var pickups = pickups
    var result = 0
    
    while !deliveries.isEmpty || !pickups.isEmpty {
        deliveries.trimZeroSuffix()
        pickups.trimZeroSuffix()
        
        result += max(deliveries.count, pickups.count) * 2 // ์ด๋™๊ฑฐ๋ฆฌ๋Š” ํ•ญ์ƒ ๊ฐ€์žฅ ๋จผ๊ฑฐ๋ฆฌ์˜ 2๋ฐฐ
        var load = cap // ํŠธ๋Ÿญ์— ์‹ค๋ฆฐ ์ƒ์ž
        while !deliveries.isEmpty {
            if deliveries.last! > load {
                deliveries[deliveries.count-1] -= load
                break
            } else {
                load -= deliveries[deliveries.count-1]
                deliveries.removeLast()
            }
        }
        
        load = cap // ์ˆ˜๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” ํƒ๋ฐฐ ๊ฐœ์ˆ˜ ์ตœ๋Œ€๋กœ ์ฑ„์›Œ์คŒ
        while !pickups.isEmpty {
            if pickups.last! > load {
                pickups[pickups.count-1] -= load
                break
            } else {
                load -= pickups[pickups.count-1]
                pickups.removeLast()
            }
        }
    }
    
    return Int64(result)
}

extension Array where Element == Int {
    mutating func trimZeroSuffix() {
        while self.last ?? -1 == 0 {
            let _ = self.removeLast()
        }
    }
}

 


[์ฐธ๊ณ  ์ž๋ฃŒ]

 

2023 ์นด์นด์˜ค ์‹ ์ž… ๊ณต์ฑ„ 1์ฐจ ์˜จ๋ผ์ธ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ for Tech developers ๋ฌธ์ œํ•ด์„ค

2023 KAKAO BLIND RECRUITMENT 1์ฐจ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๊ฐ€ ์ง€๋‚œ 9์›” 24์ผ์— ์—ด๋ ธ์Šต๋‹ˆ๋‹ค. ์˜ฌํ•ด๋Š” ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ ๋ฌธ์ œ์—†์ด 7 ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋˜์—ˆ์œผ๋ฉฐ, ๋‚œ์ด๋„๋Š” ์ž‘๋…„๊ณผ ๋น„์Šทํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์‰ฌ์šด ๋‚œ์ด๋„๋ถ€ํ„ฐ ์–ด๋ ค์šด ๋‚œ

tech.kakao.com

 

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]ํƒ๋ฐฐ ๋ฐฐ๋‹ฌ๊ณผ ์ˆ˜๊ฑฐํ•˜๊ธฐ(Swift)

 

velog.io

 

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/Swift] ํƒ๋ฐฐ ๋ฐฐ๋‹ฌ๊ณผ ์ˆ˜๊ฑฐํ•˜๊ธฐ

๋ฌธ์ œ ์ •๋ณด ๋ฌธ์ œ ์ถœ์ฒ˜ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต | ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์Šค์ฟจ ๊ฐœ๋ฐœ์ž ์ทจ์—…์˜ ํ•„์ˆ˜ ๊ด€๋ฌธ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋ฅผ ์ฒ ์ €ํ•˜๊ฒŒ ์—ฐ์Šตํ•˜๊ณ  ๋Œ€๋น„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ์ด๋ง๋ผ! ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์—์„œ ์„ ๋ฐœํ•œ ๋ฌธ์ œ๋กœ ์œ ํ˜•์„

soom-tech.tistory.com