티스토리 뷰
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/77485
💡 구현 아이디어
- 초기 배열 세팅
- 쿼리별 회전 진행
- 회전 후 최소 값 저장
- 결과 반환
💻 코드
import Foundation
func solution(_ rows:Int, _ columns:Int, _ queries:[[Int]]) -> [Int] {
// 결과 값
var result: [Int] = []
// 초기 맵 세팅
var maps: [[Int]] = [[Int]](
repeating: [Int](
repeating: -1,
count: columns
),
count: rows
)
var num = 1
for y in 0..<maps.count {
for x in 0..<maps[0].count {
maps[y][x] = num
num += 1
}
}
// 쿼리에 따라 맵회전
for query in queries {
let value = rotateMap(map: maps, query: query)
maps = value.map
result.append(value.minValue)
}
return result
}
func rotateMap(map: [[Int]], query: [Int]) -> (map: [[Int]], minValue: Int) {
var result = map
var minValue: Int = Int.max
let x1 = query[1] - 1
let y1 = query[0] - 1
let x2 = query[3] - 1
let y2 = query[2] - 1
// "좌상단 -> 우상단"
for x in (x1+1)...x2 {
result[y1][x] = map[y1][x-1]
minValue = min(minValue, result[y1][x])
}
// "우상단 -> 우하단"
for y in (y1+1)...y2 {
result[y][x2] = map[y-1][x2]
minValue = min(minValue, result[y][x2])
}
// "우하단 -> 좌하단"
for x in (x1..<x2).reversed() {
result[y2][x] = map[y2][x+1]
minValue = min(minValue, result[y2][x])
}
// "좌하단 -> 좌상단"
for y in (y1..<y2).reversed() {
result[y][x1] = map[y+1][x1]
minValue = min(minValue, result[y][x1])
}
return (map: result, minValue: minValue)
}
❌ 틀린 이유 및 틀린 부분
코드를 수정하다 보니 처음에 map을 만드는 부분에서 제대로 map이 만들어지지 않았다.
⏳ 시간 복잡도
O(N)
100 x 100 크기의 map에 최대 쿼리 10000개
한 쿼리에서 가장 많은 이동 = 가장 바깥쪽 회전 (100-1) * 4 = 396번
최대 접근 수 = 10000개 * 396번 = 3960000번
📌 풀이 또는 기억할 정보
해당 문제는 질문탭에 가면 불만!?이 많은 문제였다.
가장 큰 문제는 행과 열을 사용하면서 문제 설명에서 x,y를 사용하는 바람에 행렬과 좌표평면 사이의 혼동으로 발생한 불만이었다..
나도 문제를 읽으면서 계속 X,Y로 생각을 하다보니 헷갈리는 부분도 많았고 그래서 실수가 많이 발생했다
심지어 예시 1,2은 가로,세로의 길이가 같고 예시3번의 경우에는 100 x 97 처럼 보이는 97 x 100 이었다…
(100 x 97 로 생각한 것도 좌표 x,y로 생각하다보니 실수를 한것이었다.)
'PS > 문제 풀이' 카테고리의 다른 글
| [프로그래머스/Swift] 147354번 - 테이블 해시 함수 (0) | 2025.04.10 |
|---|---|
| [프로그래머스/Swift] 142085번 - 디펜스 게임 (0) | 2025.04.10 |
| [프로그래머스/Swift] 169199번 - 리코쳇 로봇 (0) | 2025.04.07 |
| [프로그래머스/Swift] 154540번 - 무인도 여행 (2) | 2025.04.06 |
| [프로그래머스/Swift] 67257번 - 수식 최대화 (0) | 2025.04.05 |
