[Python] 프로그래머스 - 행렬 테두리 회전하기

728x90
반응형

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

"2021 Dev-Matching: 웹 백엔드 개발자(상반기)" 문제이다.

문제에서 지시한대로 따라가며 노가다로 푸는 구현, 시뮬레이션문제이다.

 

 

1. rows, columns를 입력받고 행렬을 만든 뒤 1부터 순차적으로 행렬에 넣어준다.

 

2. queries를 돌며 각각 회전을 실행한다. 주석에 설명했듯이 우측방향(맨 윗줄)을 회전시켜주고 하(맨 오른쪽), 좌(맨 아랫줄), 상(맨 왼쪽) 방향또한 똑같이 회전시켜준다.

 

3. 각각회전시킬때마다 low에 최솟값을 넣어주고 비교해가며 회전하는 범위 중 가장 작은 값을 low에 갱신해준다.

 

4. 각각의 queries마다(회전을 할 때마다) 최솟값인 low를 answer에 append하고 마지막에 출력해준다.

def solution(rows, columns, queries):
    answer = []
    num = 1
    m = [[0] * columns for _ in range(rows)]
    for i in range(rows):
        for j in range(columns):
            m[i][j] = num
            num += 1
    for i in queries:
        x1, y1, x2, y2 = i[0], i[1], i[2], i[3]
        # 우
        tmp = m[x1 - 1][y2 - 1]
        low = tmp
        for i in range(y2 - 1, y1 - 1, -1):
            m[x1 - 1][i] = m[x1 - 1][i - 1]
            low = min(low, m[x1 - 1][i - 1])
        # 하    
        tmp2 = m[x2 - 1][y2 - 1]
        low = min(low, tmp2)
        for i in range(x2 - 1, x1, -1):
            m[i][y2 - 1] = m[i - 1][y2 - 1]
            low = min(low, m[i - 1][y2 - 1])
        m[x1][y2 - 1] = tmp
        # 좌
        tmp = m[x2 - 1][y1 - 1]
        low = min(low, tmp)
        for i in range(y1, y2 - 1):
            m[x2 - 1][i - 1] = m[x2 - 1][i]
            low = min(low, m[x2 - 1][i])
        m[x2 - 1][y2 - 2] = tmp2
        # 상
        for i in range(x1 - 1, x2 - 2):
            m[i][y1 - 1] = m[i + 1][y1 - 1]
            low = min(low, m[i + 1][y1 - 1])
        m[x2 - 2][y1 - 1] = tmp
        
        answer.append(low)
    return answer

(프로그래머스 level2)

 

# 삼성기출문제중에 비슷한 문제가 있다. 예전에 풀 때는 풀다 때려쳤는데, 다시한번 도전해봐야겠다. (훨씬 더 복잡한 구현, 시뮬문제이다.)

www.acmicpc.net/problem/17144

 

17144번: 미세먼지 안녕!

미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사

www.acmicpc.net

 

728x90
반응형
TAGS.

Comments