[프로그래머스 Lv2.] 행렬 테두리 회전하기(python)

gayoung·2022년 3월 15일
0

알고리즘

목록 보기
4/50

1. 문제

문제 설명

제한사항

입출력 예시

입출력 예 설명


2. 풀이 과정

내가 생각한 진행 과정

  • 방법 2개
      1. (값 변동 방향)오른아래왼위
      • deepcopy를 해야하는데 할 때마다 새롭게 deepcopy진행해야함
      1. (값 변동 방향)위왼아래오른
      • 첫번째 칸의 값(temp)만 저장해두고 새로운값(new)를 자리에 계속 넣어주면서, new값 변경시키고, 마지막에 temp를 넣어주면 완성
  • 자리이동 코드가 완성이 되었으면, 가장 작은 값을 찾는 코드 넣어주기

최종 코드

def solution(rows, columns, queries):
    board = [[0 for col in range(columns)] for row in range(rows)]
    val = 1
    for row in range(rows):
        for col in range(columns):
            board[row][col] = val
            val += 1

    # 방법1: 오른아래왼위
    # 방법2: 위왼아래오른
    answer = []
    for x1, y1, x2, y2 in queries:
        temp = board[x1-1][y1-1]
        mymin = temp

        # 왼쪽라인에서 위로올라옴
        for i in range(x1 - 1, x2 - 1):
            new = board[i + 1][y1 - 1]
            board[i][y1 - 1] = new
            mymin = min(new, mymin)

        # 위쪽라인에서 오른쪽으로 이동
        for i in range(y1 - 1, y2 - 1):
            new = board[x2 - 1][i + 1]
            board[x2 - 1][i] = new
            mymin = min(new, mymin)

        # 오른쪽라인에서 아래로 이동
        for i in range(x2- 1, x1 - 1, -1):
            new = board[i - 1][y2 - 1]
            board[i][y2 - 1] = new
            mymin = min(new, mymin)

        # 아래쪽라인에서 왼쪽으로 이동
        for i in range(y2- 1, y1 - 1, -1):
            new = board[x1 - 1][i - 1]
            board[x1 - 1][i] = new
            mymin = min(new, mymin)

        board[x1 - 1][y1] = temp
        answer.append(mymin)

    return answer

0개의 댓글

관련 채용 정보