티스토리 뷰

🔗 문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/77485

💡 구현 아이디어

  1. 초기 배열 세팅
  2. 쿼리별 회전 진행
  3. 회전 후 최소 값 저장
  4. 결과 반환

💻 코드

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로 생각하다보니 실수를 한것이었다.)

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함