728x90
SMALL
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
def create_matrix(rows, columns):
return [[row * columns + col + 1 for col in range(columns)] for row in range(rows)]
def rotate(matrix, x1, y1, x2, y2):
min_value = float('inf')
prev = matrix[x1][y1]
for y in range(y1, y2):
current = matrix[x1][y+1]
matrix[x1][y+1] = prev
prev = current
min_value = min(min_value, prev)
for x in range(x1, x2):
current = matrix[x+1][y2]
matrix[x+1][y2] = prev
prev = current
min_value = min(min_value, prev)
for y in range(y2, y1, -1):
current = matrix[x2][y-1]
matrix[x2][y-1] = prev
prev = current
min_value = min(min_value, prev)
for x in range(x2, x1, -1):
current = matrix[x-1][y1]
matrix[x-1][y1] = prev
prev = current
min_value = min(min_value, prev)
return min_value
def solution(rows, columns, queries):
answer = []
matrix = create_matrix(rows, columns)
for query in queries:
x1, y1, x2, y2 = [i-1 for i in query]
min_value = rotate(matrix, x1, y1, x2, y2)
answer.append(min_value)
return answer
- 2021년에 프로그래머스에서 진행되었던 Dev-Matching 문제 중 하나인 '행렬 테두리 회전하기' 문제입니다.
왜 이렇게 풀었을까?
- 문제의 로직 자체는 간단했습니다. 행렬을 주어진 조건대로 생성하고, 주어진 범위 내에서 원소들을 한 칸씩 움직일 수만 있다면 풀어낼 수 있었던 문제였습니다.
- rotate(matrix, x1, y1, x2, y2) 함수에서는 먼저 초기값을 지정해두고, 매 반복문마다 모든 방향에 대해서 원소들을 한 칸씩 움직여주는 작업을 진행합니다. 그리고 그 중에서도 최솟값을 찾아야하기 때문에 지속적으로 최솟값을 업데이트 하였습니다.
- 사실 문제 요구 사항이 굉장히 직접적이었기에, 시뮬레이션 방식으로 풀이를 구현하기만 하면 되었던 문제라 어렵지 않게 진행했습니다.
728x90
LIST
'알고리즘 문제 > 프로그래머스 (Level 2)' 카테고리의 다른 글
📗 호텔 대실 (0) | 2024.09.10 |
---|---|
📗 두 큐 합 같게 만들기 (4) | 2024.09.06 |
📗 방금그곡 (8) | 2024.08.28 |
📗 배달 (2) | 2024.08.12 |
📗 숫자 카드 나누기 (1) | 2024.08.05 |