Focus On Develop ๐ŸคŸ๐ŸคŸ

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚˜๋Š” ํŠธ๋Ÿญ ๋ณธ๋ฌธ

iOS [Swift]/์•Œ๊ณ ๋ฆฌ์ฆ˜

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚˜๋Š” ํŠธ๋Ÿญ

๋ˆ„๋ฆฌ๋‹ฌ์ดํ‹€ 2020. 12. 27. 00:42

<๋ฌธ์ œ>


<์ „๋žต์งœ๊ธฐ>

๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋Š” ํŠธ๋Ÿญ์— ๋Œ€ํ•ด์„œ ์ˆœ์„œ๋Œ€๋กœ bridge์— ์ง„์ž…์„ ์‹œ๋„ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ๊ทธ ์กฐ๊ฑด์ด ์ง€๊ธˆ ๋‚ด๊ฐ€(๋Œ€๊ธฐํ•˜๋Š” ์ฒซ๋ฒˆ์งธ ํŠธ๋Ÿญ) bridge์— ์˜ฌ๋ผ๊ฐ€๋„ ๋ฌด๊ฒŒ๋ฅผ ๊ฒฌ๋”œ ์ˆ˜ ์žˆ๋‹ˆ? ๋ฅผ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ๊ฒฌ๋”œ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ํŠธ๋Ÿญ์„ ์ง„์ž…์‹œํ‚ค๊ณ , ๊ฒฌ๋”œ ์ˆ˜ ์—†๋‹ค๋ฉด ๋นˆ์นธ์„ ํ•œ์นธ ๋ณด๋‚ธ๋‹ค. (๋‹ค๋ฆฌ๊ฐ€ ๊ฐ€๋“ ์ฐผ์„ ๊ฒฝ์šฐ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ํŠธ๋Ÿญ์„ ํƒˆ์ถœ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์–ผ๋งˆ๋งŒํผ ์ด๋™ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋นˆ์นธ์„ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค.. ์ด๋ ‡๊ฒŒ ๋นˆ์นธ์„ ๋ณด๋‚ด์ฃผ์ง€ ์•Š๊ณ  ์–ผ๋งˆ๋งŒํผ ์ด๋™ํ–ˆ๋Š”์ง€ ์œ„์น˜๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ์™€ ํ˜„์žฌ์œ„์น˜๋ฅผ Property๋กœ ๊ฐ€์ง€๋Š” struct๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ• ๊ฒƒ๊ฐ™๋‹ค..๐Ÿ˜ญ) ๋™์‹œ์— ์ด๋•Œ ์ง„ํ–‰์‹œ๊ฐ„์„ 1์ดˆ์”ฉ ๋”ํ•ด์ค˜์•ผ ํ•œ๋‹ค. ์ด ๊ณผ์ •์„ ๋Œ€๊ธฐํ•˜๋Š” ํŠธ๋Ÿญ์ด ์—†์–ด์งˆ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต์‹œ์ผœ์ค€๋‹ค!

 

<์ฝ”๋“œ>

import Foundation

func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int {
    var bridge: [Int] = []
    var curWeight = weight
    var time: Int = bridge_length

    for truck in truck_weights {
        while true {
            if bridge.count == bridge_length {
                if let firstTruck = bridge.first {
                    curWeight += firstTruck
                    bridge.removeFirst()
                }
            } else {
                if curWeight < truck {
                    bridge.append(0)
                    time += 1
                } else {
                    bridge.append(truck)
                    time += 1
                    curWeight -= truck
                    break
                }
            }
        }
    }

    return time
}

 

<Lesson Learned>

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

func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int {
    var trucks = truck_weights
    var bridge = Array(repeating: 0, count: bridge_length)
    var sec = 0
    var w = 0

    while bridge.isEmpty == false {
        // 1์ดˆ๋งˆ๋‹ค ๋‹ค๋ฆฌ์œ„์˜ ํŠธ๋Ÿญ ๋˜๋Š” ๋นˆ๊ณต๊ฐ„์€ ์›€์ง์ž„
        w -= bridge.removeFirst()
        sec += 1

        // ๋‹ค๋ฆฌ์— ๋นˆ ๊ณต๊ฐ„ ์žˆ์œผ๋ฉด
        if bridge.count < bridge_length {
            // ๋‹ค๋ฆฌ์— ์ง„์ž… ์˜ˆ์ •์ธ ํŠธ๋Ÿญ์„ ํฌํ•จํ•œ ๋ฌด๊ฒŒ์™€ ๋‹ค๋ฆฌ๊ฐ€ ๊ฒฌ๋”œ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ๋ฅผ ๋น„๊ตํ•ด์„œ
            // ๊ฒฌ๋”œ ์ˆ˜ ์žˆ์œผ๋ฉด ํŠธ๋Ÿญ ์ง„์ž… ์‹œํ‚จ๋‹ค.
            if let t = trucks.first {
                if t + w <= weight  {
                    w += trucks.removeFirst() // ํŠธ๋Ÿญ ์ง„์ž…
                    bridge.append(t) // ํŠธ๋Ÿญ ์ง„์ž… ์™„๋ฃŒ
                } else {
                    // ๊ฒฌ๋”œ ์ˆ˜ ์—…์œผ๋ฉด ํŠธ๋Ÿญ ๋Œ€๊ธฐํ•˜๊ณ  ๋นˆ๊ณต๊ฐ„๋งŒ ๋ณด๋‚ธ๋‹ค.
                    bridge.append(0)
                }
            }
        }
    }

    return sec
}

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

 

 

 

์ถœ์ € : ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚˜๋Š” ํŠธ๋Ÿญ

Comments