๐Ÿง‘๐Ÿป‍๐Ÿ’ป Coding Test/โŒจ๏ธ Programmers

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

EarthSea 2024. 4. 24. 14:36

 

 

๐Ÿ„ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฌธ์ œ ๋งํฌ

 

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

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

programmers.co.kr

โœ๐Ÿป ๋ฌธ์ œ ํ’€์ด Github ๋งํฌ

 

-Swift-CodingTest/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/2/42583.โ€…๋‹ค๋ฆฌ๋ฅผโ€…์ง€๋‚˜๋Š”โ€…ํŠธ๋Ÿญ at main · BaeJihae/-Swift-CodingTest

Swift๋กœ ํ‘ผ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๋ฌธ์ œ๋“ค์„ ์ •๋ฆฌํ•˜๊ณ  ๊ณต๋ถ€ํ•˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. Contribute to BaeJihae/-Swift-CodingTest development by creating an account on GitHub.

github.com

 

 

๋ฌธ์ œ ์„ค๋ช…

ํŠธ๋Ÿญ ์—ฌ๋Ÿฌ ๋Œ€๊ฐ€ ๊ฐ•์„ ๊ฐ€๋กœ์ง€๋ฅด๋Š” ์ผ์ฐจ์„  ๋‹ค๋ฆฌ๋ฅผ ์ •ํ•ด์ง„ ์ˆœ์œผ๋กœ ๊ฑด๋„ˆ๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋ ค๋ฉด ์ตœ์†Œ ๋ช‡ ์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๋Š”์ง€ ์•Œ์•„๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฆฌ์—๋Š” ํŠธ๋Ÿญ์ด ์ตœ๋Œ€ bridge_length๋Œ€ ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค๋ฆฌ๋Š” weight ์ดํ•˜๊นŒ์ง€์˜ ๋ฌด๊ฒŒ๋ฅผ ๊ฒฌ๋”œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ, ๋‹ค๋ฆฌ์— ์™„์ „ํžˆ ์˜ค๋ฅด์ง€ ์•Š์€ ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ๋Š” ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ํŠธ๋Ÿญ 2๋Œ€๊ฐ€ ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๊ณ  ๋ฌด๊ฒŒ๋ฅผ 10kg๊นŒ์ง€ ๊ฒฌ๋””๋Š” ๋‹ค๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌด๊ฒŒ๊ฐ€ [7, 4, 5, 6]kg์ธ ํŠธ๋Ÿญ์ด ์ˆœ์„œ๋Œ€๋กœ ์ตœ๋‹จ ์‹œ๊ฐ„ ์•ˆ์— ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฑด๋„ˆ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๊ฒฝ๊ณผ ์‹œ๊ฐ„ ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚œ ํŠธ๋Ÿญ ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋Š” ํŠธ๋Ÿญ ๋Œ€๊ธฐ ํŠธ๋Ÿญ
0 [] [] [7,4,5,6]
1~2 [] [7] [4,5,6]
3 [7] [4] [5,6]
4 [7] [4,5] [6]
5 [7,4] [5] [6]
6~7 [7,4,5] [6] []
8 [7,4,5,6] [] []

 

๋”ฐ๋ผ์„œ, ๋ชจ๋“  ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚˜๋ ค๋ฉด ์ตœ์†Œ 8์ดˆ๊ฐ€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

solution ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋‹ค๋ฆฌ์— ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ํŠธ๋Ÿญ ์ˆ˜ bridge_length, ๋‹ค๋ฆฌ๊ฐ€ ๊ฒฌ๋”œ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ weight, ํŠธ๋Ÿญ ๋ณ„ ๋ฌด๊ฒŒ truck_weights๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋•Œ ๋ชจ๋“  ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋ ค๋ฉด ์ตœ์†Œ ๋ช‡ ์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๋Š”์ง€ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

 

 

์ œํ•œ ์กฐ๊ฑด

  • bridge_length๋Š” 1 ์ด์ƒ 10,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • weight๋Š” 1 ์ด์ƒ 10,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • truck_weights์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 10,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ๋Š” 1 ์ด์ƒ weight ์ดํ•˜์ž…๋‹ˆ๋‹ค.

 

 

์ž…์ถœ๋ ฅ ์˜ˆ

bridge_length weight truck_weights return
2 10 [7,4,5,6] 8
100 100 [10] 101
100 100 [10,10,10,10,10,10,10,10,10,10] 110

 

 

 

๋ฌธ์ œ ํ’€์ด

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

import Foundation

func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int {
    
    var count = 0
    var truckWeights = truck_weights
    var currentBridge = [Int](repeating: 0, count: bridge_length)
    var currentBridgeSum = 0
    
    while !truckWeights.isEmpty {
        
        if currentBridgeSum + truckWeights[0] <= weight {
            currentBridge.removeFirst()
            currentBridgeSum -= currentBridge[0]
            currentBridge.append(truckWeights[0])
            currentBridgeSum += truckWeights[0]
            truckWeights.removeFirst()
        }else {
            currentBridge.append(0)
            currentBridge.removeFirst()
            currentBridgeSum -= currentBridge[0]
        }
        count += 1
    }
    
    var numberOfZero = currentBridge.filter{ $0 == 0 }.count
    
    if numberOfZero != bridge_length {
        count += bridge_length
    }
    
    return count
}

 

์ด ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ์ฒดํฌํ•ด์•ผํ•  ๊ฑด ์ด๋ฏธ ๋‹ค๋ฆฌ์— ์˜ฌ๋ผ๊ฐ„ ํŠธ๋Ÿญ๊ณผ ํ˜„์žฌ ๋‹ค๋ฆฌ์— ์˜ฌ๋ผ์™€์žˆ๋Š” ํŠธ๋Ÿญ๋“ค์˜ ๋ฌด๊ฒŒ, ํŠธ๋Ÿญ์ด ์™„๋ฒฝํ•˜๊ฒŒ ๋‹ค ์ด๋™ํ•  ๋•Œ๊นŒ์ง€์˜ ํšŸ์ˆ˜์ž…๋‹ˆ๋‹ค.

 

์šฐ์„  ํŠธ๋Ÿญ๋“ค์˜ ๋ฌด๊ฒŒ๊ฐ€ ๋‚˜ํƒ€๋‚˜์žˆ๋Š” ๋ฐฐ์—ด์ด ๋‹ค ๋นŒ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ ค์•ผ๊ฒ ๋‹ค๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ํ’€์—ˆ๋Š”๋ฐ, ๋งˆ์ง€๋ง‰ ํŠธ๋Ÿญ์ด ์˜ฌ๋ผ๊ฐ„ ํ›„์— ์•„์ง๊นŒ์ง€ ๋‹ค๋ฆฌ๋ฅผ ๋น ์ ธ๋‚˜๊ฐ€์ง€ ๋ชปํ•œ ํŠธ๋Ÿญ๋“ค์ด ๋‹ค๋ฆฌ๋ฅผ ๋น ์ ธ๋‚˜๊ฐˆ๋•Œ๊นŒ์ง€์˜ ํšŸ์ˆ˜๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ํ’€์ด์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค๋ฆฌ์— ํŠธ๋Ÿญ์ด ์˜ฌ๋ผ์™€์žˆ๋‹ค๋ฉด, ๋งˆ์ง€๋ง‰ ํŠธ๋Ÿญ์ด ๋น ์ ธ๋‚˜๊ฐˆ๋•Œ๊นŒ์ง€์˜ ํšŸ์ˆ˜์ธ ๋‹ค๋ฆฌ์˜ ๊ธธ์ด๋งŒํผ์„ count์— ๋”ํ•˜์—ฌ ํ•ด๊ฒฐํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

 

ํ˜„์žฌ ๋‹ค๋ฆฌ์— ์˜ฌ๋ผ์™€์žˆ๋Š” ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ๋ฅผ ๋น„๊ตํ•˜์—ฌ ๋‹ค์Œ ํŠธ๋Ÿญ์ด ๋‹ค๋ฆฌ์— ์˜ฌ๋ผ์˜ฌ ๊ฒฝ์šฐ์™€ ์•„๋‹ ๊ฒฝ์šฐ๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋กœ์ง์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

 

 

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

import Foundation

func solution(_ ๋‹ค๋ฆฌ๊ธธ์ด: Int, _ ๋ฌด๊ฒŒ์ œํ•œ: Int, _ ํŠธ๋Ÿญ๋“ค: [Int]) -> Int {
    var ์ง„ํ–‰์‹œ๊ฐ„ = 0
    var ๊ธฐ๋‹ค๋ฆฌ๋Š”ํŠธ๋Ÿญ๋“ค = ํŠธ๋Ÿญ๋“ค
    var ๋‹ค๋ฆฌ์œ„์˜ํŠธ๋Ÿญ๋“ค = [Int]()
    var ์ง„ํ–‰๊ฑฐ๋ฆฌ = [Int]()

    let ์ถœ๋ฐœ: (Int) -> ()  = { i in ๋‹ค๋ฆฌ์œ„์˜ํŠธ๋Ÿญ๋“ค.append(i) ; ์ง„ํ–‰๊ฑฐ๋ฆฌ.append(1) }

    let ๋‹ค๋ฆฌ์œ„๋ฌด๊ฒŒ์˜ํ•ฉ = { ๋‹ค๋ฆฌ์œ„์˜ํŠธ๋Ÿญ๋“ค.reduce(0) { $0 + $1 } }

    let ๋„์ฐฉ = {
        let first = ์ง„ํ–‰๊ฑฐ๋ฆฌ.first ?? 0
        if first > ๋‹ค๋ฆฌ๊ธธ์ด { ๋‹ค๋ฆฌ์œ„์˜ํŠธ๋Ÿญ๋“ค.removeFirst(); ์ง„ํ–‰๊ฑฐ๋ฆฌ.removeFirst()  }
    }

    let ์ง„ํ–‰ = { ์ง„ํ–‰๊ฑฐ๋ฆฌ = ์ง„ํ–‰๊ฑฐ๋ฆฌ.map { $0 + 1 } ; ์ง„ํ–‰์‹œ๊ฐ„ += 1 }

    while !๋‹ค๋ฆฌ์œ„์˜ํŠธ๋Ÿญ๋“ค.isEmpty || !๊ธฐ๋‹ค๋ฆฌ๋Š”ํŠธ๋Ÿญ๋“ค.isEmpty {
        ์ง„ํ–‰()
        ๋„์ฐฉ()
        if let first = ๊ธฐ๋‹ค๋ฆฌ๋Š”ํŠธ๋Ÿญ๋“ค.first  {
            if ๋‹ค๋ฆฌ์œ„๋ฌด๊ฒŒ์˜ํ•ฉ() + first <= ๋ฌด๊ฒŒ์ œํ•œ {
                ์ถœ๋ฐœ(๊ธฐ๋‹ค๋ฆฌ๋Š”ํŠธ๋Ÿญ๋“ค.removeFirst())
            }
        }
    }

    return ์ง„ํ–‰์‹œ๊ฐ„
}

 

ํ•œ๊ธ€๋กœ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋ช…์„ ์ ์€๊ฒŒ ๋„ˆ๋ฌด ๊ท€์—ฌ์›Œ์„œ ๊ฐ€์ง€๊ณ  ์˜จ ํ’€์ด์ž…๋‹ˆ๋‹ค.

์ง„ํ–‰๊ณผ ๋„์ฐฉ์˜ ํ•จ์ˆ˜๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์„œ ํ’€์ด๋ฅผ ํ’€์—ˆ์–ด์š”!

๋‹ค๋ฆฌ์˜ ๋ฌด๊ฒŒํ•ฉ์˜ ๋งค๋ฒˆ reduce๋กœ ํ•ฉํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ์‹คํ–‰์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„ ์•„์‰ฌ์šด ํ’€์ด์˜€์Šต๋‹ˆ๋‹ค.