Python/CoTe

[programmers] 행렬 테두리 회전하기

joannekim0420 2022. 3. 25. 21:55
728x90

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

 

 

 

주의!! 

실제 행렬과 리스트의 원소 접근법 바뀜 주의

 

 

접근법

0. matrix 행렬 초기화

1. 변환 해야하는 테두리 정보의 좌표값을 moves 리스트에 저장한다.

-> 시계 방향으로 회전하므로, 시계 방향 순서대로 저장한다. (난 이 부분이 조금 어려웠다)

2. moves 순서대로 다음 값과 회전한다. 

-> tmp 변수와 now (현재 위치의) 변수 값을 따로 저장한 후 사용

3.변환 된 matrix에서 최솟값 찾기

 

def solution(rows, cols, queries):
    answer = []
    matrix = [[0 for i in range(cols)] for j in range(rows)]
    num = 1
    
    #matrix 배열 초기화
    for i in range(rows):
        for j in range(cols):
            matrix[i][j] = num
            num+=1
    
    #시계 방향
    dx = [1,0,-1,0]
    dy = [0,1,0,-1] 
   
    for query in queries:
        y,x,yy,xx = query #x와 y의 값 바뀜 주의
        moves = []
        nx, ny =  x-2, y-1
        
        #모든 시계방향에 대해서
        for i in range(4):
            while True:
                nx = nx + dx[i]
                ny = ny + dy[i]  
                
                #테두리 조건
                if nx < x-1 or nx >= xx or ny < y-1 or ny >= yy :
                    nx -= dx[i]
                    ny -= dy[i]
                    break
                moves.append((nx,ny)) #테두리에 해당하는 좌표값 시계방향 순서대로 저장
        
        moves=moves[:-1]
        tmp = matrix[moves[-1][1]][moves[-1][0]]
        
        #테두리 변환
        for i in range(len(moves)):
            now = matrix[moves[i][1]][moves[i][0]]
            matrix[moves[i][1]][moves[i][0]] = tmp
            tmp = now
        
        min_ = 10000
        
        #변환 된 테두리에서 최솟값 찾기
        for i in range(len(moves)):
            min_ = min(min_,matrix[moves[i][1]][moves[i][0]])
        answer.append(min_)
        
    return answer