728x90
https://programmers.co.kr/learn/courses/30/lessons/77485
접근
총 4방향으로 회전하기 때문에 각 방향에 대해 회전해야 하는 범위를 정하여 새로운 2차원 배열에 저장한다. 이후에 새로운 2차원 배열의 좌표에 아무 숫자도 들어있지 않았다면 기존의 숫자를 대입한다.
구현
- 아래는 좌표를 입력받아 테두리를 회전시키는 함수이다.
- 각각의 4방향으로 나누고 범위를 지정하여 새로운 2차원 배열인 new_board에 저장하였다.
- 이때 위치가 바뀌는 숫자들에 대해 최솟값 비교를 진행한다.
- 4방향이 모두 new_board에 채워졌다면 new_board를 탐색하여 0인 곳은 board에 있는 숫자를 대입한다.
- 최종적으로 new_board와 최솟값을 반환한다.
def rotate(y1, x1, y2, x2, r, c, board):
new_board = [[0 for _ in range(c)] for _ in range(r)]
min_value = 987654321
for x in range(x1, x2):
new_board[y1][x+1] = board[y1][x]
min_value = min(min_value, new_board[y1][x+1])
for y in range(y1, y2):
new_board[y+1][x2] = board[y][x2]
min_value = min(min_value, new_board[y+1][x2])
for x in range(x2, x1, -1):
new_board[y2][x-1] = board[y2][x]
min_value = min(min_value, new_board[y2][x-1])
for y in range(y2, y1, -1):
new_board[y-1][x1] = board[y][x1]
min_value = min(min_value, new_board[y-1][x1])
for y in range(r):
for x in range(c):
if new_board[y][x] == 0:
new_board[y][x] = board[y][x]
return new_board, min_value
전체 코드
def rotate(y1, x1, y2, x2, r, c, board):
new_board = [[0 for _ in range(c)] for _ in range(r)]
min_value = 987654321
for x in range(x1, x2):
new_board[y1][x+1] = board[y1][x]
min_value = min(min_value, new_board[y1][x+1])
for y in range(y1, y2):
new_board[y+1][x2] = board[y][x2]
min_value = min(min_value, new_board[y+1][x2])
for x in range(x2, x1, -1):
new_board[y2][x-1] = board[y2][x]
min_value = min(min_value, new_board[y2][x-1])
for y in range(y2, y1, -1):
new_board[y-1][x1] = board[y][x1]
min_value = min(min_value, new_board[y-1][x1])
for y in range(r):
for x in range(c):
if new_board[y][x] == 0:
new_board[y][x] = board[y][x]
return new_board, min_value
def solution(rows, columns, queries):
answer = []
board = [[y+1 + (columns * x) for y in range(columns)] for x in range(rows)]
for y1, x1, y2, x2 in queries:
y1 -= 1
x1 -= 1
y2 -= 1
x2 -= 1
board, value = rotate(y1, x1, y2, x2, rows, columns, board)
answer.append(value)
return answer
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
[Level 3] 불량 사용자 (0) | 2021.09.10 |
---|---|
[Level 3] 이중우선순위큐 (0) | 2021.09.09 |
[Level 3] 보석 쇼핑 (0) | 2021.09.08 |
[Level 3] 징검다리 건너기 (0) | 2021.09.07 |
[Level 3] 기지국 설치 (0) | 2021.09.06 |