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

 

Lv2 문제고, 스스로 푼 문제다!

시간은 70분 걸렸다

 

 

주의해야할 점

  • 2번 시계 방향으로 원소를 옮기면 해당 줄에서 중복된 값이 입력되므로, 각 진행 방향의 역방향으로 값을 옮겨야 원하는 행렬이 된다    (8, 9, 10을 왼쪽에서 오른쪽으로 옮기게 되면 8, 8, 10 -> 8, 8, 8로 변경되므로 8,8,9와는 다른 값이다)
  • edge 값은 ni에 미리 저장한후 방향에 맞는 값으로 바꿔준다 

 

 

풀이 로직 

queries의 원소 갯수만큼 회전을 진행하는데, 각 회전마다 최솟값을 모아서 출력한다 

바로 떠오른 풀이 로직 순서는 다음과 같다. 

 

1. 문제에 해당하는 행렬 만들기 

: 행마다 나오는 숫자 바로 만들기 어려워서 그냥 전체 수를 하나의 배열로 만든 뒤, columns 길이 만큼씩 잘라서 rows만큼 반복해서 matrix를 생성했다 

 

2. queries에 주어진 위치들은 실제 행렬 위치 +1, +1 이므로 queries 각 원소에 -1을 해준다 

 

3. result에는 각 회전시 지나가는 모든 숫자들을 추가한다. (매번 최댓값을 비교하면 시간이 오래 걸릴 것 같아서, 해당 하는 숫자들 다 모아놓고 마지막에 최댓값을 출력하려고 했다)

 

4. 시계 방향으로 원소 옮기기 

첫 번째 주의해야할 점에서 언급한 것처럼 주어진 방향과 반대되는 방향으로 로직을 만들었다. 

range에 해당 값은 print(matrix) 해가면서 맞췄다 

3번째와 4번째 방향을 처리할 때 좀 어려웠다 

 

3. 옮길 때 edge 값 처리하는 방법 

회전을 진행하면서 가장 끝 위치에는 이전 값으로 덮어져서 따로 저장해야한다.

이는 n1 ~ n4로 미리 설정해서 원래 값을 보존한 뒤 경우에 맞춰서 추가하면 된다 

 

(각 방향에 대한 설명 구체적으로 필요할 것 같음)

 

 

- 정답 풀이 : 

 

def solution(rows, columns, queries):
    temp = [i for i in range(1, rows * columns + 1)]
    matrix = []
    index = 0
    for _ in range(rows):
        matrix.append(temp[index : index + columns])
        index += columns
         
    answer = []
    for query in queries:
        a1, a2, b1, b2 = query
        a1, a2, b1, b2 = a1 - 1, a2 - 1, b1 - 1, b2 - 1
        result = []
        n1, n2, n3, n4 = matrix[a1][b2], matrix[b1][b2], matrix[b1][b2], matrix[b1][a2]
        for i in range(b2, a2, -1):
            matrix[a1][i] = matrix[a1][i - 1]
            result.append(matrix[a1][i])

        for i in range(b1, a1, -1):
            if i == a1 + 1:
                matrix[i][b2] = n1
            else:
                matrix[i][b2] = matrix[i - 1][b2]
            result.append(matrix[i][b2])
                 
        for i in range(a2, b2):
            if i == b2 - 1:
                matrix[b1][i] = n3
            else:
                matrix[b1][i] = matrix[b1][i + 1]
            result.append(matrix[b1][i])
                
        for i in range(a1, b1):
            if i == b1 - 1:
                matrix[i][a2] = n4
            else:
                matrix[i][a2] = matrix[i + 1][a2]
            result.append(matrix[i][a2])
            
        answer.append(min(result))
            
            
    return answer

+ Recent posts