문제: 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
}
'코딩테스트 > Swift' 카테고리의 다른 글
[Swift] 백준 1406 에디터 - 시간복잡도에 익숙해지자 (0) | 2022.08.09 |
---|---|
[Swift]프로그래머스 모의고사 (0) | 2021.09.21 |
[Swift]프로그래머스 K번째 수 (0) | 2021.09.21 |
[Swift]프로그래머스 기능개발 (0) | 2021.09.21 |
[Swift] 백준 2751 수 정렬하기 2 (0) | 2021.09.05 |