728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/77485
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
rows x columns 크기인 행렬이 있습니다. 행렬에는 1부터 rows x columns까지의 숫자가 한 줄씩 순서대로 적혀있습니다. 이 행렬에서 직사각형 모양의 범위를 여러 번 선택해, 테두리 부분에 있는 숫자들을 시계방향으로 회전시키려 합니다. 각 회전은 (x1, y1, x2, y2)인 정수 4개로 표현하며, 그 의미는 다음과 같습니다.
- x1 행 y1 열부터 x2 행 y2 열까지의 영역에 해당하는 직사각형에서 테두리에 있는 숫자들을 한 칸씩 시계방향으로 회전합니다.
다음은 6 x 6 크기 행렬의 예시입니다.
![](https://blog.kakaocdn.net/dn/U0OtT/btsrNy4GOzR/VygEbXHiCyK1jHUrLGbHiK/img.png)
이 행렬에 (2, 2, 5, 4) 회전을 적용하면, 아래 그림과 같이 2행 2열부터 5행 4열까지 영역의 테두리가 시계방향으로 회전합니다. 이때, 중앙의 15와 21이 있는 영역은 회전하지 않는 것을 주의하세요.
![](https://blog.kakaocdn.net/dn/BRngH/btsrRP6eKwg/QAdqem3cBPLCnxmqq0cMnk/img.png)
행렬의 세로 길이(행 개수) rows, 가로 길이(열 개수) columns, 그리고 회전들의 목록 queries가 주어질 때, 각 회전들을 배열에 적용한 뒤, 그 회전에 의해 위치가 바뀐 숫자들 중 가장 작은 숫자들을 순서대로 배열에 담아 return 하도록 solution 함수를 완성해주세요.
풀이
Code
def solution(rows, columns, queries):
# 1. 테두리 회전 재귀 함수 선언 :
def rotate(x1, y1, x2, y2) :
min_num = int(1e9)
# 1-1. 각 모서리 함수 별도 저장
left_top = graph[x1][y1]
right_top = graph[x1][y2]
left_bottom = graph[x2][y1]
right_bottom = graph[x2][y2]
# 1-2. 테두리 위쪽 회전
for j in range(y2, y1, -1) :
graph[x1][j] = graph[x1][j-1]
min_num = min(min_num, graph[x1][j])
# 1-3. 테두리 오른쪽 회전
for i in range(x2, x1, -1) :
graph[i][y2] = graph[i-1][y2]
min_num = min(min_num, graph[i][y2])
# 1-4. 테두리 아래쪽 회전
for j in range(y1, y2) :
graph[x2][j] = graph[x2][j+1]
min_num = min(min_num, graph[x2][j])
# 1-5. 테두리 왼쪽 회전
for i in range(x1, x2) :
graph[i][y1] = graph[i+1][y1]
min_num = min(min_num, graph[i][y1])
# 1-6. 예외 인덱스 처리
graph[x1][y1+1] = left_top
graph[x1+1][y2] = right_top
graph[x2-1][y1] = left_bottom
graph[x2][y2-1] = right_bottom
# 1-7. 가장 작은 수 처리
min_num = min(min_num, left_top, right_top, left_bottom, right_bottom)
# 1-8. 최솟값 반환
return min_num
answer = []
# 2. graph 생성
graph = [[0] * columns for _ in range(rows)]
idx = 1
for i in range(rows) :
for j in range(columns) :
graph[i][j] = idx
idx += 1
# 3.
for x1, y1, x2, y2 in queries :
# 테두리 회전
answer.append(rotate(x1-1, y1-1, x2-1, y2-1))
# 4. 결과 출력
return answer
728x90
반응형
'Coding Test > Programmers' 카테고리의 다른 글
[Python/Programmers] 배달 (0) | 2023.08.24 |
---|---|
[Python/Programmers] 호텔 대실 (0) | 2023.08.24 |
[Python/Programmers] 줄 서는 방법 (0) | 2023.08.22 |
[Python/Programmers] 전력망을 둘로 나누기 (0) | 2023.08.21 |
[Python/Programmers] 무인도 여행 (0) | 2023.08.21 |