Level 2. 행렬 테두리 회전하기

Pear_Mh·2021년 7월 7일
0

Programmers-Level 2.

목록 보기
17/40

행렬 테두리 회전하기

코딩테스트 연습 > 2021 Dev-Matching: 웹 백엔드 개발자(상반기) > 행렬 테두리 회전하기

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


문제 설명

Input value = rows, columns, queries

Process =

  1. 왼쪽 [x][y11]>[x1][y11][x][y_1-1]->[x-1][y_1-1]

    return 움직인 원소들의 최소값

  2. 아래쪽 [x21][y]>[x21][y1][x_2-1][y]->[x_2-1][y-1]

    return 움직인 원소들의 최소값(갱신)

  3. 오른쪽 [x][y21]>[x+1][y21][x][y_2-1]->[x+1][y_2-1]

    return 움직인 원소들의 최소값(갱신)

  4. 위쪽 [x11][y]>[x11][y+1][x_1-1][y]->[x_1-1][y+1]

    return 움직인 원소들의 최소값(갱신)

  5. list(min(시작값, 갱신된 최소값))

Output value= list(min)


문제 구상

  1. 입력된 colums와 row를 가지는 빈 array를 생성한다.
answer = []
    array = [[0 for col in range(columns)] for row in range(rows)]
  1. 1부터 row*col 까지의 값을 array에 넣는다.
    t = 1
    for row in range(rows):
        for col in range(columns):
            array[row][col] = t
            t += 1
  1. 프로세스에 맞추어 과정을 수행한 뒤
    for x1,y1,x2,y2 in queries:
        tmp = array[x1-1][y1-1]
        mini = tmp

        for k in range(x1-1,x2-1):
            test = array[k+1][y1-1]
            array[k][y1-1] = test
            mini = min(mini, test)

        for k in range(y1-1,y2-1):
            test = array[x2-1][k+1]
            array[x2-1][k] = test
            mini = min(mini, test)

        for k in range(x2-1,x1-1,-1):
            test = array[k-1][y2-1]
            array[k][y2-1] = test
            mini = min(mini, test)

        for k in range(y2-1,y1-1,-1):
            test = array[x1-1][k-1]
            array[x1-1][k] = test
            mini = min(mini, test)
  1. 최소값 return
        array[x1-1][y1] = tmp
        answer.append(mini)

문제 풀이

def solution(rows, columns, queries):

    answer = []
    array = [[0 for col in range(columns)] for row in range(rows)]
    t = 1
    for row in range(rows):
        for col in range(columns):
            array[row][col] = t
            t += 1

    for x1,y1,x2,y2 in queries:
        tmp = array[x1-1][y1-1]
        mini = tmp

        for k in range(x1-1,x2-1):
            test = array[k+1][y1-1]
            array[k][y1-1] = test
            mini = min(mini, test)

        for k in range(y1-1,y2-1):
            test = array[x2-1][k+1]
            array[x2-1][k] = test
            mini = min(mini, test)

        for k in range(x2-1,x1-1,-1):
            test = array[k-1][y2-1]
            array[k][y2-1] = test
            mini = min(mini, test)

        for k in range(y2-1,y1-1,-1):
            test = array[x1-1][k-1]
            array[x1-1][k] = test
            mini = min(mini, test)

        array[x1-1][y1] = tmp
        answer.append(mini)

    return answer
profile
Beyond the new era.

0개의 댓글

관련 채용 정보