[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

💻 CS/알고리즘 연습

[알고리즘 연습] 행렬 테두리 회전하기 (프로그래머스 lv2, 스위프트)

inu 2022. 2. 13. 14:01
반응형

문제

https://programmers.co.kr/learn/courses/30/lessons/77485?language=swift#

 

코딩테스트 연습 - 행렬 테두리 회전하기

6 6 [[2,2,5,4],[3,3,6,6],[5,1,6,3]] [8, 10, 25] 3 3 [[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] [1, 1, 5, 3]

programmers.co.kr

풀이

import Foundation

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

    for i in 0..<rows {
        var temp = [Int]()
        for j in 1...columns {
            temp.append(columns*i + j)
        }
        matrix.append(temp)
    }

    for query in queries {
        let x1 = query[0]-1
        let x2 = query[2]-1
        let y1 = query[1]-1
        let y2 = query[3]-1

        var minValue = matrix[x1+1][y1]
        var store = matrix[x1+1][y1]

        for y in y1...y2 {
            var temp = store
            store = matrix[x1][y]
            matrix[x1][y] = temp
            minValue = min(minValue, store)
        }

        for x in x1+1...x2 {
            var temp = store
            store = matrix[x][y2]
            matrix[x][y2] = temp
            minValue = min(minValue, store)
        }

        for y in stride(from: y2-1, through: y1, by: -1) {
            var temp = store
            store = matrix[x2][y]
            matrix[x2][y] = temp
            minValue = min(minValue, store)
        }

        for x in stride(from: x2-1, through: x1+1, by: -1) {
            var temp = store
            store = matrix[x][y1]
            matrix[x][y1] = temp
            minValue = min(minValue, store)
        }

        answer.append(minValue)
    }

    return answer
}
  • 문제 자체는 어렵지 않았고 이전에 Python으로도 해결했던 문제인데, rows와 columns, x와 y의 의미를 제대로 파악하지 않아 몇번이고 틀린 문제
  • for문을 통해 반복문을 수행할 때, 특정값이 점점 작아지길 원할 경우 stride를 많이 사용한다.
  • stride(from:,to:, by:) : from에서 to 직전까지 by만큼 더해가며 반복 (to 미포함)
  • stride(from:,through:, by:) : from에서 through까지 by만큼 더해가며 반복 (through 포함)
반응형