🔗 Problem Link

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


❔Thinking

  • 주어진 직사각형 범위의 테두리를 시계방향으로 회전하고, 이 테두리에서 가장 작은 값들을 출력한다.

💻Solution

def solution(rows, columns, queries):
    answer = []
    matrix = []
    # 행렬 생성
    for i in range(1, rows*columns, columns):
        tmp = []
        for j in range(i, i+columns):
            tmp.append(j)
        matrix.append(tmp)
    # matrix = [[i+(j)*columns for i in range(1,columns+1)] for j in range(rows)]
    
    # 테두리 회전
    for q in queries:
        minimum = rows*columns+1
        x1, y1, x2, y2 = q[0]-1, q[1]-1, q[2]-1, q[3]-1
        tmp = matrix[x1][y1]
        for a in range(x1, x2): # 왼쪽
            if minimum > matrix[a+1][y1]:
                minimum = matrix[a+1][y1]
            matrix[a][y1] = matrix[a+1][y1]
            
        for a in range(y1, y2): # 아래
            if minimum > matrix[x2][a+1]:
                minimum = matrix[x2][a+1]
            matrix[x2][a] = matrix[x2][a+1]
            
        for a in range(x2, x1, -1): # 오른쪽
            if minimum > matrix[a-1][y2]:
                minimum = matrix[a-1][y2]
            matrix[a][y2] = matrix[a-1][y2]
            
        for a in range(y2, y1, -1): # 위
            if minimum > matrix[x1][a-1]:
                minimum = matrix[x1][a-1]
            matrix[x1][a] = matrix[x1][a-1]
        
        if minimum > tmp: # tmp값 삽입
            minimum = tmp
        matrix[x1][y1+1] = tmp
        answer.append(minimum)
    return answer

🗝️keypoint

  1. 행렬의 테두리 회전은 왼쪽, 아래, 오른쪽, 위 로 나누어 생각할 수 있다.
  2. 왼쪽 테두리가 위로 한 칸씩 올라갈 때, 빠지게 되는 값을 따로 저장하고 최종적으로 삽입해야 한다.
  3. 행렬의 테두리를 직접 회전하지 않고, list에 담아 rotate하고 각 자리에 대입하는 방법을 사용할 수 있다.
  4. list와 for문을 사용하면, 반드시 index의 범위를 잘 파악해야 한다.

+ Recent posts