반응형
문제
https://programmers.co.kr/learn/courses/30/lessons/77485?language=swift#
풀이
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 포함)
반응형
'💻 CS > 알고리즘 연습' 카테고리의 다른 글
[알고리즘 연습] 양궁대회 (프로그래머스 lv2, 스위프트) (0) | 2022.02.22 |
---|---|
[알고리즘 연습] 조이스틱 (프로그래머스 lv2, 스위프트) (1) | 2022.02.17 |
[알고리즘 연습] 실패율 (프로그래머스 lv1, 스위프트) (0) | 2022.02.09 |
[알고리즘 연습] 비밀지도 (프로그래머스 lv1, 스위프트) (0) | 2022.02.05 |
[알고리즘 연습] 다트 게임 (프로그래머스 lv1, 스위프트) (0) | 2022.02.05 |