문제: https://programmers.co.kr/learn/courses/30/lessons/77485
코딩테스트 연습 - 행렬 테두리 회전하기
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 rotate(_ query: [Int], _ matrix: inout [[Int]]) -> Int {
var tmp = 0
var minValue = Int.max
var xy: (x: Int, y: Int) = (query[0], query[1])
let lengthOfX = query[2] - query[0]
let lengthOfY = query[3] - query[1]
// 왼 -> 오
tmp = matrix[xy.x][xy.y]
for _ in 0..<lengthOfY {
xy = (xy.x, xy.y + 1)
swap(&tmp, &matrix[xy.x][xy.y])
minValue = min(minValue, matrix[xy.x][xy.y])
}
// 위 -> 아래
for _ in 0..<lengthOfX {
xy = (xy.x + 1, xy.y)
swap(&tmp, &matrix[xy.x][xy.y])
minValue = min(minValue, matrix[xy.x][xy.y])
}
// 오 -> 왼
for _ in 0..<lengthOfY {
xy = (xy.x, xy.y - 1)
swap(&tmp, &matrix[xy.x][xy.y])
minValue = min(minValue, matrix[xy.x][xy.y])
}
// 아래 -> 위
for _ in 0..<lengthOfX {
xy = (xy.x - 1, xy.y)
swap(&tmp, &matrix[xy.x][xy.y])
minValue = min(minValue, matrix[xy.x][xy.y])
}
return minValue
}
func solution(_ rows:Int, _ columns:Int, _ queries:[[Int]]) -> [Int] {
var result = [Int]()
var matrix = [[Int]]()
var count = 1
for _ in 0..<rows {
var arr = [Int]()
for _ in 0..<columns {
arr.append(count)
count += 1
}
matrix.append(arr)
}
for i in 0..<queries.count {
let query = queries[i].map { $0 - 1 }
result.append(rotate(query, &matrix))
}
return result
}