[Python] 프로그래머스 - 행렬 테두리 회전하기
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)
# 삼성기출문제중에 비슷한 문제가 있다. 예전에 풀 때는 풀다 때려쳤는데, 다시한번 도전해봐야겠다. (훨씬 더 복잡한 구현, 시뮬문제이다.)
17144번: 미세먼지 안녕!
미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사
www.acmicpc.net
'문제풀이 > Programmers' 카테고리의 다른 글
[Python] 프로그래머스 - 등굣길 (0) | 2021.05.02 |
---|---|
[Python] 프로그래머스 - 베스트앨범 (0) | 2021.05.02 |
[Python] 프로그래머스 - 로또의 최고 순위와 최저 순위 (0) | 2021.04.27 |
[Python] 프로그래머스 - 삼각 달팽이 (2) | 2021.04.25 |
[Python] 프로그래머스 - 이진 변환 반복하기 (0) | 2021.04.25 |