-
[Python] Programmers 행렬 테두리 회전하기알고리즘/문제풀이 2021. 7. 24. 19:24728x90
1. 문제 링크
https://programmers.co.kr/learn/courses/30/lessons/77485
2. 문제 요약
- 해당 위치를 시계 방향 회전한다. 회전에 의해 바뀐 숫자 중 가장 작은 숫자를 배열에 담아 리턴한다.
3. 아이디어 정리
- 시계 방향으로 회전하기
- 아래 그림과 같은 로직으로 진행된다.
- 왼쪽 > 오른쪽, 위 > 아래, 오른쪽 > 왼쪽, 아래 > 위 순서로 swap 하면서 진행한다.
- 회전한 숫자 중 최소값 찾기
4. 문제 풀이
4-1. 내 풀이
def solution(rows, columns, queries): """ 시계 방향으로 회전해서 이동한 숫자 중 최솟값 구하기 1. 시계방향 회전 2. 회전한 숫자 저장해서 최솟값 찾기 """ def rotate(left, right, top, bottom): """ 시계방향 회전 :return: 위치가 바뀐 숫자 중 가장 작은 값 """ pre = graph[top][left] min_num = [pre] # 왼 > 오 for i in range(left, right + 1): pre, graph[top][i] = graph[top][i], pre min_num.append(pre) # 위 > 아래 for i in range(top + 1, bottom + 1): pre, graph[i][right] = graph[i][right], pre min_num.append(pre) # 오 > 왼 for i in range(right - 1, left - 1, - 1): pre, graph[bottom][i] = graph[bottom][i], pre min_num.append(pre) # 아래 > 위 for i in range(bottom - 1, top - 1, -1): pre, graph[i][left] = graph[i][left], pre min_num.append(pre) return min(min_num) answer = list() graph = [[0] * columns for _ in range(rows)] count = 1 for i in range(rows): for j in range(columns): graph[i][j] = count count += 1 # 회전하면서 결과 담기 for querie in queries: answer.append(rotate(left=querie[1] - 1, right=querie[3] - 1, top=querie[0] - 1, bottom=querie[2] - 1)) return answer
5. 결론
- 배열 돌리기 문제 ⇒ 구현 문제
'알고리즘 > 문제풀이' 카테고리의 다른 글
[Python] 백준 10159 저울 (0) 2021.07.31 [Python] 백준 14466 소가 길을 건너간 이유 6 (0) 2021.07.24 [Python] 백준 16236 아기 상어 (0) 2021.07.24 [Python] 백준 15961, 2531 회전 초밥 (0) 2021.07.17 [Python] Programmers 순위 검색 (0) 2021.07.17