개발계발
프로그래머스 - 행렬 테두리 회전하기(77485) 본문
이번에도 문제 설명은 생략
https://school.programmers.co.kr/learn/courses/30/lessons/77485
접근 방식
1. rows * columns 크기의 2차원 배열을 만든다.
2. queries의 query를 통해 그래프를 회전시킴(함수 따로 빼기)
3. 돌리면서 최소값을 갱신시켜 최소값 반환
풀이코드
def rotate_graph(graph, query):
x1 = query[0]-1
y1 = query[1]-1
x2 = query[2]-1
y2 = query[3]-1
tmp = graph[x1][y1]
min_value = tmp
for x in range(x1, x2):
graph[x][y1] = graph[x + 1][y1]
min_value = min(min_value, graph[x + 1][y1])
for y in range(y1, y2):
graph[x2][y] = graph[x2][y + 1]
min_value = min(min_value, graph[x2][y + 1])
for x in range(x2, x1, -1):
graph[x][y2] = graph[x - 1][y2]
min_value = min(min_value, graph[x - 1][y2])
for y in range(y2, y1 + 1, -1):
graph[x1][y] = graph[x1][y - 1]
min_value = min(min_value, graph[x1][y - 1])
graph[x1][y1 + 1] = tmp
return min_value
def solution(rows, columns, queries):
answer = []
graph = []
for i in range(rows):
tmp = []
for j in range(columns):
tmp.append(i * columns + (j + 1))
graph.append(tmp)
for query in queries:
answer.append(rotate_graph(graph, query))
return answer
주의사항
1. 회전 시 맨 처음 시작값을 기록해둬야 한다.
2. 시계방향으로 회전시키는 경우 아래 그림의 순서에 맞게 돌려야한다.
3. 마지막 회전은 +1 해줘야 한다.(아래 그림의 1-1번에서 회전된 값이 돌아오는 것 방지)
4. 시작값을 마지막에 대입해줘야 한다.
결론 : 시작값의 위치 기억해놓고, 시작위치 먼저 값을 새롭게 대입할 수 있게 회전!
'알고리즘' 카테고리의 다른 글
프로그래머스 - 거리두기 확인하기(81302) (1) | 2024.05.02 |
---|---|
프로그래머스 - 삼각달팽이(68645) (2) | 2024.05.01 |
프로그래머스 - 교점에 별 만들기(87377) (1) | 2024.04.26 |
프로그래머스 - 옹알이(1) (120956) (2) | 2024.04.23 |
프로그래머스 - 겹치는 선분의 길이(120876) (0) | 2024.04.23 |