MUKER_DEV with iOS

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ํ–‰๋ ฌ ํ…Œ๋‘๋ฆฌ ํšŒ์ „ํ•˜๊ธฐ ๋ณธ๋ฌธ

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

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ํ–‰๋ ฌ ํ…Œ๋‘๋ฆฌ ํšŒ์ „ํ•˜๊ธฐ

MUKER 2023. 6. 23. 01:15
 

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

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

programmers.co.kr


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

func solution(_ rows:Int, _ columns:Int, _ queries:[[Int]]) -> [Int] {

    var result = [Int]()
    var arr = [[Int]]()
    
    for i in 0..<rows { // ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
        arr.append(Array((i*columns)+1...(i*columns)+columns))
    }
    
    for i in queries { // ํšŒ์ „ํšŒ์˜ค๋ฆฌ!
        let startY = i[0]-1, startX = i[1]-1, endY = i[2]-1, endX = i[3]-1
        var block = Array(repeating: [Int](), count: 4) // block์— ํ…Œ๋‘๋ฆฌ๋ฅผ 4๊ฐœ๋กœ ์ž˜๋ผ ๋‹ด์Œ
        
        for i in startX...endX { // ๊ฐ€๋กœ๋ธ”๋ก ๊ตฌํ•˜๊ธฐ
            block[0].append(arr[startY][i])
            block[2].insert(arr[endY][i], at:0)
        }
        
        if startY+1 <= endY-1 { // ์„ธ๋กœ๋ธ”๋ก ๊ตฌํ•˜๊ธฐ, ์กฐ๊ฑด๋ฌธ์ด ์„ฑ๋ฆฝ์ด ์•ˆ๋œ๋‹ค๋ฉด ์„ธ๋กœ๋ธ”๋ก์„ ๊ตฌํ•  ํ•„์š” ์—†์Œ
            for i in startY+1...endY-1 {
                block[1].append(arr[i][endX])
                block[3].insert(arr[i][startX], at:0)
            }
        }
        
        var newBlock = block.flatMap {$0}
        result.append(newBlock.min()!) // ์ž‘์€ ๋ธ”๋ก ๊ตฌํ•˜๊ธฐ
        
        for i in startY...endY { // ํ…Œ๋‘๋ฆฌ๋ฅผ ๊ฑฐ๊พธ๋กœ ๋Œ๋ฉด์„œ newBlock์˜ ๋งˆ์ง€๋ง‰๋ถ€ํ„ฐ ๋‹ค์‹œ ๋„ฃ์–ด์คŒ.
            arr[i][startX] = newBlock.popLast()!
        }
        for i in startX+1...endX {
            arr[endY][i] = newBlock.popLast()!
        }
        for i in (startY...endY-1).reversed() {
            arr[i][endX] = newBlock.popLast()!
        }
        if startX+1 <= endX-1 {
            for i in (startX+1...endX-1).reversed() {
            arr[startY][i] = newBlock.popLast()!
            }
        }
    }
    return result
}

ํ’€์ด ํ‚ค์›Œ๋“œ

- ํ…Œ๋‘๋ฆฌ์˜ ์ˆซ์ž๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ตฌํ•ด block๋ฐฐ์—ด์— ๋„ฃ์–ด์ค€๋‹ค.
- ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ํ•œ๋ฒˆ ์›€์ง์ธ ํ˜•ํƒœ๋กœ ๋‹ค์‹œ ๋ฐฐ์—ด์— block๋ฐฐ์—ด์„ ๋„ฃ์–ด์ค€๋‹ค.
- ์ž„์‹œ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ ๋ฎ์–ด์”Œ์›Œ์คฌ์œผ๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ๋” ์ค„์ผ ์ˆ˜ ์žˆ์„๊ฑฐ ๊ฐ™๋‹ค.