MUKER_DEV with iOS

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๊ด‘๋ฌผ ์บ๊ธฐ ๋ณธ๋ฌธ

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

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๊ด‘๋ฌผ ์บ๊ธฐ

MUKER 2023. 7. 3. 11:39
 

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

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

programmers.co.kr


์„ฑ๊ณต ํ’€์ด

import Foundation

func solution(_ picks:[Int], _ minerals:[String]) -> Int {
    var arr = [[String]](), pick = picks, result = 0
    
    var slice = picks.reduce(0,+) // ํ…Œ์ผ€8๋ฒˆ์„ ์œ„ํ•œ.. ๊ณก๊ฐฑ์ด ์ˆ˜๋งŒํผ 5๊ฐœ์”ฉ ๋Š์–ด์ค˜์•ผ ํ–ˆ๋‹ค.
    for i in stride(from: 0, to: minerals.count, by: 5) {  // ๊ด‘๋ฌผ 5๊ฐœ์”ฉ ๋Š์–ด์ฃผ๊ธฐ
        guard slice != 0 else { break }
        if i+4 >= minerals.count { arr.append(Array(minerals[i...]))}
        else { arr.append(Array(minerals[i...i+4]))}
        slice -= 1
    }
    
    arr = arr.sorted { arr1, arr2 in // 5๊ฐœ์”ฉ ๋Š์–ด์ค€ ๊ด‘๋ฌผ์ผ€์ด์Šค, ๊ฐ€์น˜๊ฐ€ ๋†’์€ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•˜๊ธฐ
        if arr1.filter({ $0=="diamond" }).count == arr2.filter({ $0=="diamond" }).count {
            return arr1.filter { $0=="iron" }.count > arr2.filter { $0=="iron" }.count
        } else {
            return arr1.filter { $0=="diamond" }.count > arr2.filter { $0=="diamond" }.count
        }
    }
    
    for mineral in arr { // ๊ณก๊ฐฑ์ด ๊ณจ๋ผ์„œ ๊ด‘๋ฌผ 5๊ฐœ์”ฉ ์ˆœ์„œ๋Œ€๋กœ ์บ๊ธฐ
        guard pick.reduce(0,+) != 0 else { break }
        var pickax = -1, count = Int.max
        for i in 0..<3 {
            guard pick[i] != 0 else { continue }
            let work = mineral.map {
                if $0=="diamond" {
                    switch i {
                        case 0: return 1
                        case 1: return 5
                        default: return 25
                    }
                } else if $0=="iron" {
                    switch i {
                        case 0: return 1
                        case 1: return 1
                        default: return 5
                    }
                } else {
                    switch i {
                        case 0: return 1
                        case 1: return 1
                        default: return 1
                    }
                }
            }.reduce(0,+)
            if count >= work { // ์ตœ์†Œ๋กœ ์บ˜ ์ˆ˜ ์žˆ์„ ๋•Œ ๊ทธ ๊ณก๊ดญ์ด ์‚ฌ์šฉ
                pickax = i
                count = work
            }
        }
        print(pick)
        pick[pickax] -= 1
        result += count
    }
    print(pick)
    return result
}