728x90
반응형
문제
rows x columns 크기인 행렬이 있습니다.
행렬에는 1부터 rows x columns까지의 숫자가 한 줄씩 순서대로 적혀있습니다.
이 행렬에서 직사각형 모양의 범위를 여러 번 선택해, 테두리 부분에 있는 숫자들을 시계방향으로 회전시키려 합니다.
각 회전은 (x1, y1, x2, y2)인 정수 4개로 표현하며, 그 의미는 다음과 같습니다. x1 행 y1 열부터 x2 행 y2 열까지의 영역에 해당하는 직사각형에서 테두리에 있는 숫자들을 한 칸씩 시계방향으로 회전합니다.
행렬의 세로 길이(행 개수) rows, 가로 길이(열 개수) columns, 그리고 회전들의 목록 queries가 주어질 때, 각 회전들을 배열에 적용한 뒤, 그 회전에 의해 위치가 바뀐 숫자들 중 가장 작은 숫자들을 순서대로 배열에 담아 return 하도록 solution 함수를 완성해주세요.
코드
def rotation(matrix, r1, c1, r2, c2):
r1 -= 1; c1 -= 1; r2 -= 1; c2 -= 1
stack = [matrix[r1][c1]]
for c in range(c1+1,c2+1):
stack.append(matrix[r1][c])
matrix[r1][c] = stack[-2]
for r in range(r1+1,r2):
stack.append(matrix[r][c2])
matrix[r][c2] = stack[-2]
for c in range(c2,c1-1,-1):
stack.append(matrix[r2][c])
matrix[r2][c] = stack[-2]
for r in range(r2-1,r1-1, -1):
stack.append(matrix[r][c1])
matrix[r][c1] = stack[-2]
return min(stack), matrix
def solution(rows, columns, queries):
answer = []
matrix = []
for i in range(rows):
matrix.append([j + i * columns for j in range(1,columns+1)])
for query in queries:
r1, c1, r2, c2 = query[:]
result, matrix = rotation(matrix, r1, c1, r2, c2)
answer.append(result)
return list(answer)
메모
rotation의 경우 t1과 t2의 변수를 따로 둬서 원본 값들을 저장했었다.
다른 분이 스택을 활용하는 것을 보고 코드를 수정하였다.
728x90
반응형
'코딩테스트' 카테고리의 다른 글
[프로그래머스 Lv.2] 월간 코드 챌린지 시즌1 - 쿼드압축 후 개수 새기 (2) | 2024.12.16 |
---|---|
[프로그래머스 Lv.2] 2020 카카오 인턴십 - 수식 최대화 @ (1) | 2024.12.16 |
[프로그래머스 Lv.2] 카카오 블라인드 채용 - 방금 그 곡 (+34번 케이스 오류) (2) | 2024.12.16 |
[프로그래머스 Lv.2] 카카오 블라인드 채용 - n진수 게임] (구현 쉬움) (3) | 2024.12.14 |
[프로그래머스 Lv.2] 카카오 블라인드 채용 - k진수에서 소수 개수 구하기 (0) | 2024.12.13 |